我编写了一个应用程序,该应用程序连接到蓝牙设备并在汽车(在后台)和导航(或其他东西)在前台使用。
但在 Android 7+(也可能是 6)上,应用程序会在一段时间后进入睡眠状态。当我尝试从相机拍照时,“睡眠模式”立即生效,我的应用程序现在正在睡眠(没有蓝牙连接,没有通知)-只是死应用程序。
我必须转到最近的应用程序 -> 单击我的应用程序,这会“唤醒”。蓝牙现在再次连接到设备。
但我仍然无法检查应用程序是否正在睡眠。那么,如何让应用程序在后台保持唤醒状态呢?
我读了一些关于 WakeLock 的内容,但看起来它不起作用,因为应用程序仍在睡眠。但也许我用错了。
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wk = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakeLock");
wk.acquire();
和 onDestroy
wk.release();
Thanks
从 Android API 23 开始,Google 引入了Doze mode
and App Standby
以节省电池电量。当设备进入打瞌睡模式或应用程序进入App Standby
,应用程序完成的所有任务都会被推迟。我们遇到了一个警报问题,该警报由于同样的原因而没有触发。如果您阅读文档,您会发现使用唤醒锁也没有帮助。
瞌睡限制 以下限制适用于您的应用程序
在瞌睡中:
网络访问被暂停。
系统忽略唤醒锁。
标准 AlarmManager 警报(包括 setExact() 和 setWindow())
推迟到下一个维护时段。如果您需要设置闹钟
在打瞌睡时触发,使用 setAndAllowWhileIdle() 或
setExactAndAllowWhileIdle()。使用 setAlarmClock() 设置的闹钟继续
正常触发 - 系统在这些警报发生前不久退出打瞌睡状态
火。
系统不执行 Wi-Fi 扫描。
系统不允许同步适配器运行。系统不允许JobScheduler运行
因此,如果您想绕过所有这些,您的应用程序必须在前台有一个进程。再次来自同一个文档 -
该应用程序当前有一个进程位于前台(或者作为
活动或前台服务,或被其他活动使用或
前台服务)。
在您的情况下,运行一项服务并将其优先级提高到前台。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)