我知道在iOS中,后台应用程序只能运行
我的申请是否有办法避免在10分钟后被终止。在后台?我不会将我的应用程序提交到应用程序商店,所以一切都被允许(私有框架,即使我不需要它也使用gps)我知道苹果不推荐这个,但它仅用于监控目的。我需要它没有限制地运行。
我探索了几种可能性,包括VoIP,但它每10分钟只给我30秒,这还不够。我也读过这篇文章: iPhone - Backgrounding to poll for events 其中JackPearse指定了一种使用VoIP 30秒任务“恢复”10分钟有限长度任务的方法。但我不希望我的任务每10分钟开始和结束,它必须连续运行。 我也尝试了他的UPDATE2,但它对我不起作用。 我甚至尝试用GSEvent.type 2012拦截UIEvent,这似乎是结束我的后台任务的一个,但没有运气。奇怪的是,当我打开和调试Xcode时,我的后台任务永远不会结束,但是当我没有(单独测试模拟器)时,它会在10分钟后结束。
答案 0 :(得分:1)
我已经尝试过某种方式( nsrunloop ,* performselectoronmainthread *)。它在模拟器中运行良好(不在设备中,因为当应用程序进入后台时苹果会自动崩溃。
status是BOOL变量。
- (void)applicationDidEnterBackground:(UIApplication *)application {
while (!**status**) {
[[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:60.0]];
[self goBackground];
}
}
答案 1 :(得分: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中的背景音频应用程序。