gpt4 book ai didi

java - 唤醒锁只工作一次

转载 作者:行者123 更新时间:2023-11-29 02:22:56 26 4
gpt4 key购买 nike

我创建了一个捕捉传入通知的服务。每当出现 whatsapp 通知时,屏幕应该被唤醒并启动 Activity 。第一次使用时效果很好,但随后屏幕只停留在 sleep 模式,当我解锁手机时 Activity 开始运行。

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

@TargetApi(26)
public class NLService extends NotificationListenerService {

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

onCreate函数中的wakelock代码:

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();
}

在 Activity 中,我在 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 开发的新手。我错过了什么?谢谢!

最佳答案

原来是flag组合

FLAG_SHOW_WHEN_LOCKED | FLAG_DISMISS_KEYGUARD | FLAG_TURN_SCREEN_ON

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

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

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

关于java - 唤醒锁只工作一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54115564/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com