我创建了一个捕获传入通知的服务。每当出现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开发的新手。 我想念什么? 谢谢!
答案 0 :(得分:0)
事实证明,标志组合
FLAG_SHOW_WHEN_LOCKED | FLAG_DISMISS_KEYGUARD | FLAG_TURN_SCREEN_ON
仅在每次活动中一次生效(在屏幕上打开并关闭键盘锁)。与我的上述评论相反,删除并重新应用这些标志不起作用。
如果您希望屏幕/唤醒更改第二次生效,则必须创建一个新的Activity,并对其应用相同的标志。
如果用户手动更改电话状态(通过移动到另一个“活动”或通过关闭屏幕/锁定电话),这也会导致标志失去作用。