如何让我的应用程序在后台运行超过10分钟?

5
我知道在iOS中,后台应用只能运行以下任务:
  • 有限长度的任务(10分钟)
  • 位置更新
  • VoIP
  • 音频
我的应用程序有没有办法在后台运行超过10分钟而不被终止?我不会将我的应用程序提交到应用商店,所以可以使用私有框架,即使我不需要它,也可以使用GPS等。我知道苹果不推荐这样做,但这只是为了监控目的。我需要它无限制地运行。
我尝试了几种可能性,包括VoIP,但它只给我30秒,每10分钟一次,这不够用。我还阅读了这篇文章:iPhone - Backgrounding to poll for events,其中JackPearse指定了一种使用VoIP 30秒任务“恢复”10分钟有限长度任务的方法。但我不想让我的任务每10分钟开始和结束,它必须持续运行。我也尝试了他的UPDATE2,但对我来说不起作用。我甚至尝试拦截GSEvent.type 2012的UIEvent,似乎是结束我的后台任务的事件,但仍然没有成功。奇怪的是,当我打开和调试Xcode时,我的后台任务从未结束,但当我没有打开Xcode并仅测试模拟器时,它在10分钟后结束。
2个回答

1

我已经尝试过一些方法(nsrunloop,*performselectoronmainthread*)之类的。当应用程序进入后台时,在模拟器中运行良好(在设备上不行,因为苹果会在一段时间后自动崩溃)。

status是一个BOOL变量。

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

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

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中将应用程序声明为后台音频应用程序。

我的应用程序是一个VoIP应用程序,当应用程序在后台运行时,它应该通过声音接收通知或来电。但是使用上述解决方案时,它无法播放通知声音。有什么解决办法吗? :-) - Saiful
你不应该将此用于普通应用程序!我的是用于调查和内部分发的。这并不是任何官方的将应用程序保持在后台的方式。 - Jorge Aguirre
你把那段代码放在appdidfinishlaunching里面?然后你会把什么放在appdidenterbackground里面? - eggie5
在 appDidEnterBackground 中,您可以像这样在后台启动一个线程[myClass performSelectorOnBackground:@selector(doThis)]; - Jorge Aguirre
嗨,George,我有一个问题。如果我在appDidEnterBackground方法中执行一个选择器(doThis),那么doThis是否会在后台运行而没有10分钟的限制?doThis需要是UIBackgroundTaskIdentifier吗?我对此有点困惑。谢谢。 - LetBulletFlies
1
这是一个错误,你不应该这样做。但它可以在后台运行而不受10分钟限制的影响。我不知道UIBackgroundTaskIdentifier的相关信息。 请注意,如果您这样做,您的应用程序肯定不会被App Store接受:这只是为了个人项目。 - Jorge Aguirre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接