我有一个服务,可以监听推送通知并创建活动。一切正常,除非设备的屏幕关闭。所需的行为是通知会将屏幕唤醒到锁定状态主屏幕并显示通知。
我只能用以下方式创建此行为:
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
PowerManager.ACQUIRE_CAUSES_WAKEUP |
PowerManager.ON_AFTER_RELEASE,
WAKELOCK_KEY);
但是,我发现Android已弃用FULL_WAKE_LOCK
而支持FLAG_KEEP_SCREEN_ON。但是,我在后台服务调用的活动中尝试了这个:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
我的日志显示正在创建此活动,但屏幕仍然不显示此活动。如果我按下电源按钮,显示屏会立即显示活动,证明它已创建。以下是我尝试过的一些事情的摘要:
FULL_WAKE_LOCK
还有其他选择吗?
答案 0 :(得分:0)
从服务中唤醒(SCREEN_ON)设备
newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP | ON_AFTER_RELEASE, "MyTag").
在Android 4.1,4.4,5.0
上测试在我的应用程序中,我通过AlarmManager
唤醒设备并注册广播事件。
确保在<{1}} 之前启动服务中获取唤醒锁,并在服务中的同一个调用堆栈中释放锁而不是,因为执行此操作会将设备驻留在SCREEN_OFF中
答案 1 :(得分:-1)
这是Android Clock在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);
您使用的是第一组标志吗?
编辑:我刚测试过它并且有效。