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。