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

Posted

技术标签:

【中文标题】如何让我的应用程序超过 10 分钟。在后台?【英文标题】:How to keep my app longer than 10 min. in the background? 【发布时间】:2012-03-29 16:47:20 【问题描述】:

我知道在 ios 中,后台应用程序只能运行

有限长度的任务(10 分钟) 位置更新 网络电话 音频

有没有办法让我的应用程序在 10 分钟后避免被终止。在后台?我不会将我的应用程序提交到应用程序商店,所以一切都是允许的(私有框架,即使我不需要它也可以使用 gps)我知道苹果不推荐这样做,但这只是出于监控目的。我需要它无限制地运行。

我探索了几种可能性,包括 VoIP,但它每 10 分钟只给我 30 秒,这还不够。我还阅读了这篇文章: iPhone - Backgrounding to poll for events 其中 JackPearse 指定了一种使用 VoIP 30 秒任务“恢复”10 分钟有限长度任务的方法。但我不希望我的任务每 10 分钟开始和结束,它必须连续运行。 我也尝试了他的 UPDATE2,但它对我不起作用。 我什至尝试使用 GSEvent.type 2012 拦截 UIEvent,这似乎是结束我的后台任务的一个,但没有运气。奇怪的是,当我打开并调试 Xcode 时,我的后台任务永远不会结束,但是当我没有(单独测试模拟器)时,它会在 10 分钟后结束。

【问题讨论】:

【参考方案1】:

我已经尝试过一些方法(nsrunloop,*performselectoronmainthread*)。它在 simulator 中运行良好(不是在设备中,因为当应用程序进入后台时,苹果有时会自动崩溃。

status 是一个 BOOL 变量。

- (void)applicationDidEnterBackground:(UIApplication *)application 

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

【讨论】:

【参考方案2】:

我发现了如何通过在后台连续播放一首歌曲来让我的应用程序在后台保持超过 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 中,您可以在后台执行选择器,该选择器可以永久使用。 App不会被中断,你可以查看UIApplication backgroundtimeRemaining 看它永远不会减少。

当然,在plist中将应用声明为背景音频应用。

【讨论】:

我的应用程序是一个 voip 应用程序,当应用程序在后台时,它应该接收通知或有声音的来电。但是使用上述解决方案,它不会播放通知声音。有什么解决办法吗? :-) 您不应该将它用于普通应用程序!我的用于调查和实习分发。这不是将您的应用程序保持在后台的任何官方方式。 所以你把那段代码放在appdidfinishlaunching中?然后你在 appdidenterbackground 中放了什么? 在appDidEnterBackground中,可以像这样在后台启动线程[myClass performSelectorOnBackground:@selector(doThis)]; 这是一个错误,是的,你不应该这样做。但它在后台运行时没有 10 分钟的限制。我不知道 UIBackgroundTaskIdentifier。请注意,如果您这样做,您的应用肯定不会在应用商店中被接受:这只是个人项目。

以上是关于如何让我的应用程序超过 10 分钟。在后台?的主要内容,如果未能解决你的问题,请参考以下文章

在后台运行应用程序超过 10 分钟

在 iOS 中在后台上传超过 10 分钟的照片

Android O,后台服务运行超过 30 分钟。为啥?

如何让我的应用在 iPhone 上后台运行?

如何使用 Dropbox 下载超过三分钟?

iOS后台执行和防止应用程序被暂停/终止