2010-11-13 56 views
7

在我的iOS 4應用程序中,我需要在用戶指定的時間從後臺打開一個URL。但是,出於某種原因,我出於某種原因無法從後臺啓動URL。這裏是我打開一個URL的代碼:UIApplication openURL background

if (![[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.stackoverflow.com"]]) 
{ 
    // the URL wasn't opened. we will ignore this for now. 
} 

這段代碼全部從前面創建的守護進程中啓動。我已經在模擬器上測試了這些代碼,並且URL未打開,並且出於某種原因該方法返回YES,但是當我再次打開我的應用程序(通過快速應用程序切換)時,它會打開URL。有沒有什麼方法可以讓我的應用程序再次到達前臺(而不是通過本地通知),以便URL可以打開,或者這是一個錯誤或未公開的功能。另外,如果有另一種方式可以打開網址,那麼這些網址就可以在後臺運行,這也會有所幫助。

回答

5

我相信我已經找到了它(不適用於模擬器,因爲它將命令傳遞給mac上的終端,因爲模擬器沒有命令行)。使用此:

system([[NSString stringWithFormat:@"uiopen \"%@\"", myUrlToOpen] UTF8String]); 

這將傳遞命令uiopen(通過越獄找到)到設備,迫使其打開URL。我希望這有助於我的立場。

+0

所以我必須越獄我的設備,使其工作? – adruzh 2011-07-07 15:35:07

+1

@adruzh是的,你這樣做,該命令不適用於未破壞的設備:( – 2011-07-07 16:00:07

+0

它在越獄設備中完美工作。 – 2015-06-17 12:45:08

3

這不支持iOS。每the relevant section of Apple's iOS Programming Guide

對於一些類型的背景的 執行必須提前 通過使用它們 [通過]包含具有以下 值的一個 或多個字符串的陣列的應用被聲明支持:

  • audio - 應用程序播放聲音內容給用戶,而在 的背景。
  • 位置 - 該應用程序會在後臺運行時向用戶通知其位置,即使是 也是如此。
  • voip - 該應用程序使用戶能夠使用Internet連接撥打電話 。

...

除了前面的鑰匙,iOS的 提供了另外兩種方式做工作 背景:

  • 應用程序可以向系統提供額外的時間來完成一個給定的任務。
  • 應用程序可以安排本地通知以預定的時間在 處遞送。

您的使用不符合任何允許的多任務類型。

4

UIKit調用只能在主線程上運行。我認爲,因爲這是在後臺線程上運行,所以Safari仍然訪問網址,但是您的應用仍處於活動狀態。嘗試在不久之後打開Safari,看看它是否加載了URL。

解決方法是將它放在主線程中,從而在代碼運行時離開您的應用程序。這聽起來不像你想要它做的,對不起。如果你想訪問的網址在你的應用程序,你可以呈現一個UIWebView。

相關問題