我已经看过几次,但我还没有真正看到一个明确的答案......
从iOS 5开始,我的应用程序似乎遇到了这样的问题:如果用户锁定屏幕,我的NSTimer会在锁定屏幕中大约20秒后停止发射。这使我的应用程序在用户锁定屏幕时每次定时器触发时都会播放声音。
自从我将设备更新到iOS 5后,才发生这种情况。
我的问题是:1。在更新的设备上使用相同的功能是否有任何解决方法; 2.如果您的应用在锁定时未运行,建议采用不接收差评的方法。
答案 0 :(得分:1)
当用户锁定屏幕时,the app enters the 'inactive' state。这与将您的应用程序输入后台类似但不完全相同。 Apple的文档说明“该应用程序正在前台运行但当前没有接收事件。(它可能正在执行其他代码。)”
然而,在进入非活动状态后,iPhone确实会完全进入睡眠状态,除非正在运行某些东西以使其保持活动状态......显然,等待NSTimer发射不符合此标准。 There is discussion in this previous question.一种解决方案,就是在计时器启动时发出声音,并在此期间连续播放无声声音,以防止iPhone进入睡眠状态。一个黑客,但至少在这种情况下不是一个完全丑陋的黑客,因为使用声音以保持iPhone唤醒以播放声音具有一种对称性。
以前关联的内容:
来自Apple's guidelines regarding implementing long-running background tasks:
播放背景音频
一个连续播放音频的应用程序(即使应用程序在后台运行)也可以注册为 通过包含UIBackgroundModes键(带有)的背景音频应用程序 在Info.plist文件中输入audio)。必须包含此密钥的应用 在后台播放用户的可听内容。
您是否在自己的应用中实现了此功能?如果没有,那就是你的问题。
关于#2:你可以更新应用程序的描述,表明它不能锁定屏幕,但更好的方法就是让它按照用户的预期运行。 :)
答案 1 :(得分:1)
在iOS5中,Apple推出了更多后台任务模式,包括“音频”,“位置”,“voip”,“报亭内容”,“外部配件”和“蓝牙中心”。我认为您可以确定您可以在应用中使用哪种模式。链接为http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW24