2

当我使用 wifi 网络发送/接收音频时,我正在开发的应用程序需要 wifi 不断开启。然后它会播放音频。需要持续执行此操作,直到用户选择停止它。

问题: iOS 在 30 分钟后关闭 WiFi,因此套接字关闭并且 AudioQueues 停止。以下是 Apple 文档的摘录:

为了防止 Wi-Fi 硬件消耗过多电量,iOS 有一个内置计时器,如果没有正在运行的应用程序通过 UIRequiresPersistentWiFi 键请求使用它,iOS 会在 30 分钟后完全关闭硬件。如果用户启动包含密钥的应用程序,iOS 会在应用程序的生命周期内有效地禁用计时器。但是,一旦该应用程序退出或暂停,系统就会重新启用计时器。

注意:请注意,即使 UIRequiresPersistentWiFi 的值为 true,它在设备空闲(即屏幕锁定)时也不起作用。该应用程序被认为是非活动的,虽然它可能在某些级别上运行,但它没有 Wi-Fi 连接。

已经实现的东西:

  1. 音频会话在设备上被激活。它一直保持这种状态,直到用户选择停止音频或连接丢失并且 AudioQueues 也停止。

  2. UIRequiresPersistentWiFi 在 .plist 文件中设置为 true

  3. 实现可达性 API 以检测任何连接丢失并执行必要的操作。

  4. “应用程序不在后台运行”在 .plist 文件中设置为“false”

  5. “必需的背景模式”在 .plist 文件的数组中具有“应用程序播放音频”项。

  6. NSStreamNetworkServiceTypeVoiceforKey 在两个设备上的套接字的属性 NSStreamNetworkServiceType 上设置。

  7. 将套接字上的 kCFStreamPropertyNoCellular 属性设置为 kCFBooleanTrue 的值没有帮助

  8. 唯一有帮助的设置是将 NSStreamNetworkServiceType 设置为 NSStreamNetworkServiceTypeVoIP 并为 .plist 文件中的“必需的背景模式”字段添加“应用程序提供 IP 语音服务”。但是,Apple 将拒绝该应用程序,因为该应用程序未在应用程序中实现任何 VoIP 服务。

我一直在与 Apple DTS 讨论这个问题,根据他们的说法,没有 API 级别的支持可以帮助解决这个问题。然而,我对此说法表示怀疑,应用商店中有几个应用程序(例如 Pandora)需要此功能。

4

1 回答 1

0

禁用设备睡眠计时器并告诉用户将应用程序保持在前台。这将防止显示屏关闭(屏幕锁定),从而防止设备进入低功耗状态,从而使 WIFI 无线电保持通电状态。

于 2012-12-13T02:03:12.397 回答