2013-02-11 58 views
0

在我的應用程序中,我希望用戶在關閉當前應用程序時看到另一個應用程序。 它有可能以任何方式?我試圖通過自定義url方案編寫代碼並打開應用程序:如何在用戶關閉當前應用程序時打開另一個應用程序?

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

但它沒有奏效。我在這裏放了一個斷點,一旦我關閉了應用程序就停在這裏,但沒有任何反應。這不會去AppStore。僅供演示和內部使用。

+0

如果您在應用程序仍處於活動狀態時通過按下按鈕或執行其他操作來調用相同的代碼和URL,是否可以在您的應用程序中工作? – rmaddy 2013-02-11 19:29:42

+0

是的。它從其他方面起作用。 – Ashutosh 2013-02-11 19:31:43

+0

@Ashutosh就像一個測試,如果將此代碼移動到'applicationDidEnterBackground'方法,它是否工作? – rmaddy 2013-02-11 19:51:00

回答

4

應該怎麼辦呢?
號 你能做到這一點?(可能)不

我寫了一個小的測試應用嘗試打開我知道工作(蘋果地圖網址將打開地圖應用程序)的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記錄什麼的。這個應用程序返回YEScanOpenURL:,但返回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

+0

不幸的是,事實並非如此。 – Ashutosh 2013-02-11 20:47:06

+0

你想要這個的原因是什麼?如果你想限制訪問,可能會有更好的方法。 – 2013-02-11 20:58:11

+0

所以我有一個容器應用程序,它將鏈接到幾個不同的應用程序。但是,一旦用戶在其他應用程序中並關閉它,那麼他可能不得不再次訪問容器應用程序來打開其他應用程序。這僅用於演示目的,因此請不要擔心這個概念和可用性, – Ashutosh 2013-02-11 21:01:08

3

您可以使用他們的URL方案和您提供的代碼自由地打開任何其他應用程序 - 只要確保它不違反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。

+0

正如我上面所說。我不必把這個放在Appstore上,這隻會用於演示和內部使用。所以我不擔心這一切。 – Ashutosh 2013-02-11 20:17:56

+0

你應該把這個問題放在原來的問題中,不是每個人都通讀一個問題的評論:) – Emil 2013-02-11 20:20:36

相關問題