从其他应用程序调用应用程序

时间:2009-11-09 09:15:36

标签: objective-c iphone cocoa-touch

我正在Objective-C中编写一个应用程序,其功能是调用并执行另一个application.Pls我可以知道这个程序吗???让我也知道我需要保持调用应用程序必须加载和执行的位置? ??

4 个答案:

答案 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

      • 属于此URL类型的URL的URL方案数组。每个
        scheme是一个字符串。属于的网址 给定的URL类型的特征是 他们的计划组成部分。

    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];