Android 9休眠时任意键唤醒屏幕

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()后一定要记得释放!

相关推荐
A小辣椒1 天前
TShark:Wireshark CLI 功能
linux
A小辣椒1 天前
TShark:基础知识
linux
逐光老顽童1 天前
Java 与 Kotlin 混合开发避坑指南:30 个真实案例实录
android·kotlin
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
爱勇宝2 天前
鸿蒙生态的下半场:开发者不只要能开发,还要能赚钱
android·前端·程序员
Yeyu2 天前
刷新一帧的艺术:invalidate / postInvalidate / postInvalidateOnAnimation全解析
android
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
潘潘潘2 天前
Android OTA 升级原理和流程介绍
android
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
plainGeekDev2 天前
null 判断 → Kotlin 可空类型
android·java·kotlin