2012-03-13 114 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]; 
    } 
} 
相关问题