Android屏幕唤醒仅适用于完全唤醒锁定
我有一个监听推送通知并创建活动的服务。除了当设备的屏幕关闭时,一切正常。所需的行为是,通知会将屏幕唤醒到锁定状态主屏幕并显示通知 我只能通过以下方式创建此行为:Android屏幕唤醒仅适用于完全唤醒锁定,android,wakelock,powermanager,Android,Wakelock,Powermanager,我有一个监听推送通知并创建活动的服务。除了当设备的屏幕关闭时,一切正常。所需的行为是,通知会将屏幕唤醒到锁定状态主屏幕并显示通知 我只能通过以下方式创建此行为: mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE,
WAKELOCK_KEY);
然而,我看到Android已经弃用了完整的唤醒锁,而支持打开标志屏幕。但是,我在从后台服务调用的活动中尝试了这一点:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我的日志显示正在创建此活动,但屏幕仍不显示此活动。如果我按下电源按钮,显示屏会立即显示活动,证明它是创建的。以下是我尝试过的一些事情的总结:
完全唤醒锁定可以工作,但不推荐使用
WindowManager-标志\u打开\u屏幕\u,标志\u保持\u屏幕\u打开不起作用
谷歌WakefulBroadCastReceiver不工作
除了全锁,还有其他选择吗 这就是安卓时钟在onCreate方法中所做的:
final Window win = getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
// Turn on the screen unless we are being launched from the AlarmAlert
// subclass as a result of the screen turning off.
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
| WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
您正在使用第一组标志吗
编辑:我刚刚测试了它,它可以工作。从服务中唤醒设备上的屏幕\u与 newWakeLockPowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_导致|在|发布后|打开|我的标签 在安卓4.1、4.4、5.0上测试 在我的应用程序中,我通过AlarmManager唤醒设备并注册广播事件。
在启动服务之前,请确保在WakefulBroadCastReceiver中获取wakelock,并释放服务中不在同一调用堆栈中的锁,因为这样做将使设备处于屏幕关闭状态。不推荐使用完整的wakelock。