我正在Objective-C中编写一个应用程序,其功能是调用并执行另一个application.Pls我可以知道这个程序吗???让我也知道我需要保持调用应用程序必须加载和执行的位置? ??
答案 0 :(得分:4)
“启动”另一个应用程序的唯一方法是,如果您愿意,另一个应用程序与您的“合作”。
合作以应用程序公开的URL协议方案的形式出现。例如mailto :(由系统邮件应用程序公开)和短信:(由Messages应用程序公开)。
http://wiki.akosma.com/IPhone_URL_Schemes似乎有一个全面的第三方应用列表,公开了您可以使用的自定义协议方案。
启动另一个应用程序需要调用[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"twitterrific://..."];
(例如)。
从OS 3.0开始,您还可以通过UIApplication的-canOpenURL:
检查给定的URL协议方案是否可用 - 检查某个应用程序是否已注册协议方案,或者换句话说检查是否已安装应用程序。
如果您自己编写这两个应用程序,那么启动自定义协议方案非常简单,但是您无法启动任意iPhone应用程序,并且由于沙箱,您无法枚举可用的应用程序。
答案 1 :(得分:0)
我不确定我是否完全理解您的问题,但如果您要尝试的是启动另一个应用,那么有很多方法可以做到这一点。最简单的可能是使用NSTask类。这是一个使用NSTask在Objective-C应用程序中启动iCal的简单示例。
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/Applications/iCal.app/Contents/MacOS/iCal"];
[task launch];
[task release];
答案 2 :(得分:0)
请参阅NSWorkspace类的-launchApplication:方法。
答案 3 :(得分:0)
1注册自定义URL方案 - 在您的应用程序中Info.plist指定CFBundleURLTypes的子属性
CFBundleURLName
一个字符串,它是URL类型的抽象名称。确保
独特性,建议
您指定了反向DNS样式
标识符,例如,
com.acme.myscheme。 URL类型名称
这里提供的是用作一个关键词
中的本地化字符串
InfoPlist.strings文件中的一个
语言本地化的束
子目录。本地化的字符串是
URL的人类可读名称
用给定的语言输入。
CFBundleURLSchemes
2实现handleOpenURL方法以接收通知
(BOOL)应用程序:(UIApplication *)应用程序handleOpenURL:(NSURL *)url { if([[url scheme] isEqualToString:@“myscheme”]){ ...
调用应用程序中的3构造一个指向您已定义的自定义方案的URL并将其打开。 iPhone OS将此用于http,mailto,tel和sms URL方案
NSURL * myURL = [NSURL URLWithString:@“myscheme://?params ...”]; [[UIApplication sharedApplication] openURL:myURL];