停止设备进入睡眠模式一段时间的方法

3
在我的应用程序中,有一些内容需要从服务器下载。当用户开始下载并且应用程序处于非活动状态时,应用程序会进入后台状态,此时下载将停止并失败。为了避免这种情况,我尝试使用“beginBackgroundTaskWithExpirationHandler”在后台实现下载继续。这只能在一定的时间内工作,如果设备在后台状态/休眠模式下的时间更长,下载将失败。
为了避免下载失败,我想在应用程序下载内容时避免设备进入睡眠模式,并已实施相应措施。我一旦开始下载就将“setIdleTimerDisabled”设置为“YES”,并在下载完成或下载失败后恢复该属性为“NO”。
[[UIApplication sharedApplication] setIdleTimerDisabled:Yes];

应用程序在开始下载后被限制进入睡眠模式,但在下载完成后,应用程序仍未进入睡眠模式。
在下载开始后,应用程序永远不会进入睡眠模式。
有人能帮我限制设备只在下载过程中进入睡眠吗?
TNQ
1个回答

1
我曾经遇到过类似的问题,即重置屏幕亮度的问题。通过我的研究,我发现在按下主页按钮后,操作系统会接管控制并且不允许您重置亮度、定时器等。

您可以通过另一种方式解决此问题。当下载完成时提供本地通知,在applicationWillEnterForeground中编写代码以启用计时器。

- (void)applicationWillEnterForeground:(UIApplication *)application {
     [[UIApplication sharedApplication] setIdleTimerDisabled:YES];
}

我从StackOverflow上得到了这个,但是我忘记了链接。抱歉。


在我的情况下,我没有按Home键,但是即使将idleTimmerDisabled属性设置为NO,应用程序仍然不会进入睡眠状态。下载完成后,我将该属性设置为NO,由于设备没有任何交互,因此设备应该进入睡眠状态...如果您有更多信息,请提供建议。 - Dinakar
我也会尝试实现你上面提到的逻辑,本地通知是指你所说的NSNotification吗?我理解得对吗? - Dinakar
1
我使用了UILocalNotification,我认为你的代码中会有其他问题,因为你没有按Home键,也无法重置空闲计时器。请检查代理是否正确设置。如果这不能解决您的问题,请发布您的代码。 - Ab'initio
谢谢您的回复,Arshad。我应该设置什么委托?我的代码中没有什么新的东西。在-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ // 我将idleTimerDisabled设置为Yes}中。在connection didFinishLoading中,我将其设置为NO。但是在下载完成后它不会休眠。设备属性已更改。即使我的应用程序在后台运行并切换到其他应用程序,设备也不会休眠。我尝试在iPad的设置选项卡中重置时间持续时间,但从那时起iPad从未休眠过。 - Dinakar
Arshad,感谢你的所有帮助。最终我解决了我的问题。在这之前,我一直在连接xcode(调试)时测试我的应用程序,幸运的是,当我断开iPad与Mac的连接并测试时,一切似乎都正常工作了。我还不确定连接到xcode时发生了什么...有些奇怪。 - Dinakar

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