我正在使用的应用程序需要wifi才能持续开启,因为我使用wifi网络发送/接收音频。然后播放音频。需要持续这样做,直到用户选择停止它。
问题: iOS 30分钟后关闭WiFi,因此套接字关闭,AudioQueues停止。以下是Apple文档的摘录:
为了防止Wi-Fi硬件使用太多电量,iOS有一个 内置计时器,30分钟后完全关闭硬件 如果没有正在运行的应用程序通过该请求使用它 UIRequiresPersistentWiFi键。如果用户启动了一个应用程序 包括密钥,iOS有效地禁用持续时间的计时器 应用程序的生命周期。该应用程序退出或暂停后, 但是,系统重新启用计时器。
注意:请注意即使 UIRequiresPersistentWiFi的值为true,它没有效果 设备处于空闲状态(即屏幕锁定)。该应用程序被考虑 不活动,虽然它可能在某些级别上起作用,但它没有Wi-Fi 连接。
已经实施的内容:
在设备上激活音频会话。它保持这种状态,直到用户选择停止音频或连接丢失并且AudioQueues也被停止为止。
在.plist文件中将UIRequiresPersistentWiFi设置为true
实施可达性API以检测任何连接丢失并做必要的事情。
“应用程序无法在后台运行”在.plist文件中设置为“false”
“必需的背景模式”在.plist文件的数组中有“App播放音频”项。
NSStreamNetworkServiceTypeVoiceforKey在属性NSStreamNetworkServiceType上为两个设备上的套接字设置。
套接字上设置的kCFStreamPropertyNoCellular属性值为kCFBooleanTrue无效
唯一有帮助的设置是将NSStreamNetworkServiceType设置为NSStreamNetworkServiceTypeVoIP,并为.plist文件中的“Required Background modes”字段添加“App for IP over IP services”。但是Apple会拒绝该应用程序,因为它没有在应用程序中实现任何VoIP服务。
我一直在与Apple DTS谈论这个问题,据他们说,没有API级别的支持来帮助解决这个问题。然而,我对此声明有疑问,应用程序商店中有几个应用程序(例如Pandora)需要此功能。
答案 0 :(得分:0)
禁用设备睡眠计时器并告诉用户将应用程序保留在前台。这样可以防止显示屏关闭(屏幕锁定),这将阻止设备进入低功耗状态,这样WIFI无线电就可以保持通电状态。