我已经看到这个问题出现了几次,但我还没有真正看到一个明确的答案......
从 iOS 5 开始,我的应用程序似乎遇到了这样的问题:如果用户锁定屏幕,我的 NSTimer 在锁定屏幕大约 20 秒后停止触发。如果用户锁定屏幕,这使得我的应用程序在每次计时器触发时都会播放声音毫无意义。
自从我将设备更新到 iOS 5 后才发生这种情况。
我的问题是 1. 是否有任何解决方法可以在更新的设备上使用相同的功能或 2. 如果您的应用程序在锁定时无法运行,那么推荐的方法是什么?
我已经看到这个问题出现了几次,但我还没有真正看到一个明确的答案......
从 iOS 5 开始,我的应用程序似乎遇到了这样的问题:如果用户锁定屏幕,我的 NSTimer 在锁定屏幕大约 20 秒后停止触发。如果用户锁定屏幕,这使得我的应用程序在每次计时器触发时都会播放声音毫无意义。
自从我将设备更新到 iOS 5 后才发生这种情况。
我的问题是 1. 是否有任何解决方法可以在更新的设备上使用相同的功能或 2. 如果您的应用程序在锁定时无法运行,那么推荐的方法是什么?
在iOS5中,苹果引入了更多的后台任务模式,包括“音频”、“位置”、“voip”、“newsstand-content”、“external-accessory”和“bluetooth-central”。我认为您可以确定可以在您的应用程序中使用哪种模式。链接是http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW24
当用户锁定屏幕时,应用程序进入“非活动”状态。这类似于将您的应用程序置于后台,但并不完全相同。Apple 的文档指出“该应用程序正在前台运行,但当前未接收事件。(它可能正在执行其他代码。)”
但是,在进入非活动状态后,iPhone 确实完全进入睡眠状态,除非正在运行以使其保持活动状态......等待 NSTimer 触发显然不满足此标准。在上一个问题中有讨论。似乎一种解决方案是在计时器触发时播放声音,并在此期间连续播放静音以防止 iPhone 进入睡眠状态。一个黑客,但至少在这种情况下不是一个完全丑陋的黑客,因为使用声音来保持 iPhone 保持清醒以播放声音具有一种对称性。
先前链接的内容:
来自Apple 关于实施长期运行的后台任务的指南:
播放背景
音频 连续播放音频的应用程序(即使应用程序在后台运行时)可以通过在其 Info.plist 文件中包含 UIBackgroundModes 键(带有值音频)注册为背景音频应用程序。包含此密钥的应用程序必须在后台向用户播放有声内容。
你在你的应用程序中实现这个吗?如果不是,那是你的问题。
关于#2:您可以更新应用程序的描述以表明它不能在屏幕锁定的情况下工作,但更好的是让它按用户期望的方式工作。:)