我目前正在开发一个 Android 应用程序,它应该从蓝牙外围设备读取传感器值并将它们发送到后端服务器。为使该应用在屏幕关闭时也能正常工作,需要获取部分唤醒锁定,并将该应用置于电池优化白名单中。我知道只有在没有其他选项可用时才应该使用电池白名单,但对于我的用例,它似乎是唯一的解决方案,如本文末尾的表格所述:https ://developer.android .com/training/monitoring-device-state/doze-standby。该表指出,当“应用程序的核心功能是保持与外围设备的持久连接以提供外围设备互联网访问的目的”时,白名单是应用程序可接受的解决方案。
这准确地描述了我的用例。
但是,当我调试应用程序时,我可以看到唤醒锁定正在生效,因为当屏幕关闭并且蓝牙 API 仍在接收通知时,应用程序并未暂停。但是,查看几分钟后,wifi 停止工作,导致所有请求保持在“待处理”状态。使用移动网络而不是 wifi 时也会发生这种情况。我已经尝试缓冲接收到的数据,直到网络再次可用,但是我不认为这是一个有效的解决方案,因为在用户再次解锁他的设备之前应用程序可能会耗尽内存。
我已经读过,在 android 7 之前的 android 版本中,应用程序可以使用 wifi 锁来保持 wifi 为该特定应用程序工作。android 版本 8 或 9 中是否有类似的功能?或者我错过了设备设置中的配置选项以保持 wifi 唤醒?
由于在 android 开发者文章中描述了用例,因此建议有人确实已经实现了一个执行完全相同的事情的应用程序。是否有可用的代码示例演示如何实现这一点?
我的移动应用程序是使用cordova 实现的。我尝试了以下插件来让我的应用保持清醒:
对于唤醒锁:cordova-plugin-powermanagement:1.0.5 或更高版本。
提示用户将应用加入白名单:cordova-plugin-doze-optimize: 0.5.4 或更高版本。