2012-03-13 88 views
4

我知道,在iOS上,後臺應用程序只能運行如何讓我的應用程序超過10分鐘。在後臺?

  • 有限長度的任務(10分鐘)
  • 位置更新
  • 的VoIP
  • 音頻

是否有方式爲我的申請,以避免10分鐘後終止。在後臺?我不會將我的應用程序提交給應用程序商店,所以一切都是允許的(私人框架,即使我不需要使用gps)我知道蘋果不推薦這樣做,但它僅用於監控目的。我需要它沒有限制地運行。

我探索了幾種可能性,包括VoIP,但它每隔10分鐘只給我30秒,這是不夠的。我也讀過這篇文章: iPhone - Backgrounding to poll for events 其中JackPearse指定了一種方法來使用VoIP 30秒任務「恢復」10分鐘有限長度任務。但我不希望我的任務每10分鐘開始和結束,它必須連續運行。 我也試過他的UPDATE2,但它不適合我。 我甚至試圖用GSEvent.type 2012攔截UIEvent,這似乎是結束我的後臺任務的一個,但沒有運氣。奇怪的是,當我打開並調試Xcode時,我的後臺任務永遠不會結束,但是當我沒有(單獨測試模擬器)時,它會在10分鐘後結束。

回答

1

我發現瞭如何通過在後臺持續播放歌曲讓我的應用程序在後臺的時間超過10分鐘。 在AppDidFinishLauching:

[[AVAudioSession sharedInstance] setActive:YES error:&error]; 
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; 
NSURL *url = [NSURL fileURLWithPath:...]; //Song URL 
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 

player.numberOfLoops = -1; 
[player play]; 

在AppDidEnterBackground可以執行在後臺一個選擇,它可以永遠持續下去。該應用程序不會中斷,你可以檢查UIApplication backgroundtimeRemaining,並看到它永遠不會減少。

當然,聲明該應用程序爲plist中的背景音頻應用程序。

+0

我的應用程序是一個voip應用程序,它應該在應用程序處於後臺時接收聲音或來電。但通過上述解決方案,它不會播放通知聲音。任何解決方案:-) – Saif 2012-08-28 07:09:23

+0

你不應該用這個正常的應用程序!礦是爲了調查和實習生分配。這不是任何保持你的應用程序在後臺的官方方式。 – 2012-08-29 18:04:11

+0

所以你把代碼放在appdidfinishlaunching中?然後你把什麼appdidenterbackground? – eggie5 2013-02-21 05:35:41

1

我已經嘗試了一些辦法(nsrunloop,* performselectoronmainthread *)像that.It的作品以及在模擬器(不是設備,因爲蘋果崩潰後自動有時),當應用程序被切換到後臺。

status是一個BOOL變量。

- (void)applicationDidEnterBackground:(UIApplication *)application { 

    while (!**status**) { 
     [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:60.0]]; 
     [self goBackground]; 
    } 
} 
相關問題