如何在用户关闭当前应用时打开另一个应用?

时间:2013-02-11 19:22:49

标签: ios objective-c cocoa-touch uiapplicationdelegate

在我的应用程序中,我希望用户在关闭当前应用程序时看到另一个应用程序。 有可能吗?我尝试编写代码并通过自定义网址架构打开应用程序:

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSString * string = @"InnovationLab://";
    NSURL * url = [NSURL URLWithString:string];
    [[UIApplication sharedApplication] openURL:url];
}

但它没有用。我在这里放了一个断点,一旦我关闭应用程序就停在这里,但没有任何反应。这不会去AppStore。仅用于演示和内部使用。

2 个答案:

答案 0 :(得分:4)

你应该这样做吗?第
你能做这个吗? (可能)不是

我写了一个小测试应用程序,试图打开一个我知道可以工作的URL(Apple Maps URL将打开地图应用程序)。我输入了一些日志代码来查看发生了什么。

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSURL *url = [NSURL URLWithString:@"http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino"];
    if ([[UIApplication sharedApplication] canOpenURL:url]) {
        NSLog(@"Can Open URL");
    } else {
        NSLog(@"Cannot Open URL");
    }
    BOOL success =  [[UIApplication sharedApplication] openURL:url];
    NSLog(@"Success is %@", [NSNumber numberWithBool:success]);

    NSLog(@"Shared app: %@", [UIApplication sharedApplication]);
    NSLog(@"applicationWillResignActive");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSURL *url = [NSURL URLWithString:@"http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino"];
    [[UIApplication sharedApplication] openURL:url];
    NSLog(@"Shared app: %@", [UIApplication sharedApplication]);
    NSLog(@"Entered Background");
}

所有NSLogs都记录了一些内容。该应用为YES返回canOpenURL:,但在您尝试NO时返回-openURL:作为返回值。

这是日志:

Flipper[18946:907] Can Open URL
Flipper[18946:907] Success is 0
Flipper[18946:907] Shared app: <UIApplication: 0x1f0413f0>
Flipper[18946:907] applicationWillResignActive
Flipper[18946:907] Shared app: <UIApplication: 0x1f0413f0>
Flipper[18946:907] Entered Background

如果您想允许用户打开另一个应用,您应该为他们提供一个按钮(或操作表或警报)。重新设置主页按钮听起来可能会让您的应用被拒绝。

请注意,如果您将相同的代码放入application:didFinishLaunchingWithOptions:,它就可以找到并立即让您碰到地图应用。 applicationWillResignActive:中可能会阻止此行为。如果您真的开始这样做(并且您的应用程序只有一个视图),您可以使用viewWillDisappear

答案 1 :(得分:3)

您可以使用他们的网址方案和您提供的代码自由打开任何其他应用 - 只需确保它不违反HIG(Human Interface Guidelines)。但是在你的情况下它不会起作用。

This question并且答案提供了有关此问题的更多详细信息,但如果您在越狱手机上运行该应用程序,则可以使用此小代码:

[[UIApplication sharedApplication] launchApplicationWithIdentifier:@"com.apple.Preferences" suspended:NO];

或来自this answer的此片段:

system("/usr/bin/open com.mycompany.MyAppName");

那说,坏主意。 Apple将以99%的确定性拒绝您的应用。 applicationWillResignActive - 方法用于保存您的工作并准备关闭,您不能也不能在该方法中打开另一个应用程序。(不适用,因为该应用程序不会上传到App Store。