在iOS 6中是否有一种方法可以对自定义应用程序执行此操作? 我只知道通过URL启动应用程序的自定义方案。
注册应用程序的URL类型
在应用程序的Info.plist文件中包含CFBundleURLTypes键。CFBundleURLTypes键包含一个字典数组,每个字典定义了应用程序支持的URL scheme。
调用URL(如上所述注册)
NSURL *myURL = [NSURL URLWithString:@"todolist://www.acme.com?Quarterly%20Report#200806231300"];
[[UIApplication sharedApplication] openURL:myURL];
处理自定义URL方案的调用
具有自定义URL方案的应用程序必须能够处理传递给它的URL。所有URL都会在应用委托中传递,无论是在启动时还是在应用程序运行或后台运行时。为了处理传入的URL,您的委托应该实现以下方法:
使用application:willFinishLaunchingWithOptions:
和application:didFinishLaunchingWithOptions:
方法检索关于URL的信息并决定是否要打开它。如果任一方法返回NO,则不会调用您的应用程序URL处理代码。
在iOS 4.2及更高版本中,使用application:openURL:sourceApplication:annotation:
方法打开文件。
在iOS 4.1及更早版本中,使用application:handleOpenURL:
方法打开文件。
如果您的应用程序在URL请求到达时未运行,则会启动并移至前台,以便打开URL。您的application:willFinishLaunchingWithOptions:
或application:didFinishLaunchingWithOptions:
方法的实现应从其选项字典中检索URL并确定应用程序是否可以打开它。如果可以,请返回YES,并让您的application:openURL:sourceApplication:annotation:
(或application:handleOpenURL:
)方法处理URL的实际打开。(如果同时实现两种方法,则必须在URL可以打开之前两者都返回YES。)
如果您的应用程序在URL请求到达时正在运行但处于后台或挂起状态,则会将其移至前台以打开URL。此后不久,系统调用委托的application:openURL:sourceApplication:annotation:
检查URL并打开它。如果您的委托未实现此方法(或当前系统版本为iOS 4.1或更早版本),则系统会调用您的委托的application:handleOpenURL:
方法。
注意
如果两个或多个应用程序注册了相同的自定义URL,则无法保证iOS在调用自定义URL时打开哪个应用程序。
进一步阅读
www.youtube.com/watch?
是一个URL方案? - Bogdacutu我想原生的邮件应用程序使用与所有应用程序打开URL相同的方法(如果没有安装的应用程序可以处理URL,则将打开应用程序或使用Mobile Safari完成请求)。
您应该能够使用以下方法实现相同的结果:
NSString *youtubeURL = @"http://www.youtube.com/watch?v=c2JTu22qxms";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:youtubeURL]];
如果已安装YouTube应用程序,则将打开该应用程序,否则将使用Safari播放视频。
---- 更新 -----
我决定研究一下YouTube应用程序的具体操作方式。
我发现了一些有趣的东西!
以下是YouTube应用程序声明的URL:
fb[appID]
vnd.youtube
youtube
这意味着http://www.youtube.com将请求重定向到列表中的一个URL。但是当我尝试时,我没有看到Mobile Safari打开并重定向。
我将继续调查,这非常有趣。