【问题标题】:Android Oreo, wifiManager.getScanResults() returns empty list in DozeAndroid Oreo,wifiManager.getScanResults() 在 Doze 中返回空列表
【发布时间】:2018-06-24 22:29:30
【问题描述】:
当设备进入打盹模式时,wifiManager.getScanResults() 在 Oreo (API26) 上返回空列表时遇到问题。在它进入 Doze 之前,以及在早期的 API 版本上,一切正常(我得到一个 ScanResults 列表)。
我经常在前台服务中调用此方法,每分钟一次。
我该如何处理这个新 Android 的行为?
欢迎任何提示甚至代码示例。
【问题讨论】:
标签:
java
android
android-8.0-oreo
wifimanager
android-doze
【解决方案1】:
首先,有两种打瞌睡:
我们称它们为 Light Doze 和 Deep sleep doze。
在您将手机放在桌子上没有充电的情况下几分钟后开始打盹,这种打盹会限制一些服务的访问。
深度睡眠打瞌睡会在 20 到 30 分钟没有移动(并且仍然不充电)后开始,并将手机的使用量降至最低,它会因一些通知和来电而醒来。
打盹模式只在手机不移动时出现,所以当手机移动时,不认为是打盹模式。
对于您的问题,它与 Android 8 有关,当应用不在前台时会终止后台服务。
对于您的问题,您的后台服务将在几分钟后被终止。
定位服务将无法访问,因此您将无法获得 wifi 更新。
(这里的答案是:不要打瞌睡模式,你会松懈的)。
因此,如果您想在您的应用被终止或屏幕关闭时获取 wifi 扫描更新:
- 使用JobDispatcher 创建将每 x 秒执行一次的作业并进行扫描。 jobDispatcher 在轻度打盹模式下仍然工作
- 如果手机进入深度打盹,手机没有移动,因此您可以断定扫描将是相同的并且不必更新它,一旦手机退出打盹,您的工作将恢复。李>