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

相关推荐
oioihoii13 小时前
CentOS运行Teemii实操:Docker Compose部署、漫画导入与公网阅读
linux·docker·centos
DianSan_ERP21 小时前
电商架构演进:如何在高并发场景下实现多平台API的标准化履约?
运维·前端·网络·安全·架构·自动化
恒53921 小时前
Linux文件系统I
linux·运维·服务器
阿成学长_Cain21 小时前
Linux ipcs 命令超全详解:查看共享内存 / 消息队列 / 信号量,IPC 运维必备
linux·运维·服务器·网络·数据库
黯然神伤88821 小时前
AlmaLinux设置软件下载源
linux·alma
青瓦梦滋1 天前
协议定制/序列化-反序列化(Linux视角)
linux·服务器·网络·c++
运维老郭1 天前
【K8s运维实战】Kubernetes临时存储卷实战:emptyDir核心用法与gitRepo弃用迁移指南
运维·云原生·kubernetes
珠海西格电力1 天前
云边端协同架构:零碳园区管理系统的技术底座
大数据·运维·人工智能·算法·架构·能源
阿成学长_Cain1 天前
Linux dirs命令详解|Bash目录堆栈管理快速切换目录实战教程
linux·运维·前端·数据库
小羊Yveesss1 天前
2026年微信小程序后端怎么搭建?后台、数据、接口和运维怎么选
运维·微信小程序·小程序