Android 9休眠时任意键唤醒屏幕
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
bash
@Override
public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
if (!mSystemBooted) {
// If we have not yet booted, don't let key events do anything.
return 0;
}
Log.d(TAG, "interceptKeyBeforeQueueing" );
PowerManager powerManager=(PowerManager)mContext.getSystemService(Context.POWER_SERVICE);
boolean isScreenOn =powerManager.isInteractive();//flag为true,屏幕状态为黑屏或亮屏未解锁,反之为亮屏。
Log.d(TAG, "interceptKeyBeforeQueueing isScreenOn:"+isScreenOn );
if(!isScreenOn){
PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.SCREEN_BRIGHT_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.ON_AFTER_RELEASE,getClass().getName());
wakeLock.setReferenceCounted(false);
if (!powerManager.isInteractive() ||(wakeLock != null && !wakeLock.isHeld())) {
wakeLock.acquire();
wakeLock.release();
}
}
final boolean interactive = (policyFlags & FLAG_INTERACTIVE) != 0;
final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
final boolean canceled = event.isCanceled();
final int keyCode = event.getKeyCode();
acquire()和release()要成对调用,如果只申请了亮屏,没有释放,屏幕会一直处于亮屏状态。所以调用acquire()后一定要记得释放!