唤醒锁只能使用一次

时间:2019-01-09 17:35:27

标签: java android

我创建了一个捕获传入通知的服务。每当出现whatsapp通知时,都应唤醒屏幕并开始活动。第一次可以正常运行,但随后屏幕仅处于睡眠模式,当我解锁手机时,活动开始运行。

服务代码: 我在这里声明变量:

@TargetApi(26)
public class NLService extends NotificationListenerService {

    private String TAG = this.getClass().getSimpleName();
    public PowerManager pm;
    public PowerManager.WakeLock wl;

onCreate函数中的唤醒锁代码:

pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "callOverlay:wakeScreenNotification");

以及onNotificationPosted函数中: [获取通知内容等...]

try {
    //wake up screen
    wl.acquire();
    //run activity
    dialogIntent.putExtra("SERVICE", "whatsapp");
    new android.os.Handler().postDelayed( new Runnable() {
        public void run() {                              
            dialogIntent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(dialogIntent);
         }
    }, 600);
} catch (Exception e) {
    Log.i(TAG,"ERROR: "+e);
} finally {
    wl.release();
}

在活动中,我在onCreate函数中添加了以下代码:

final Window win= getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

我是android开发的新手。 我想念什么? 谢谢!

1 个答案:

答案 0 :(得分:0)

事实证明,标志组合

FLAG_SHOW_WHEN_LOCKED | FLAG_DISMISS_KEYGUARD | FLAG_TURN_SCREEN_ON

仅在每次活动中一次生效(在屏幕上打开并关闭键盘锁)。与我的上述评论相反,删除并重新应用这些标志不起作用。

如果您希望屏幕/唤醒更改第二次生效,则必须创建一个新的Activity,并对其应用相同的标志。

如果用户手动更改电话状态(通过移动到另一个“活动”或通过关闭屏幕/锁定电话),这也会导致标志失去作用。

相关问题