Android framework中屏幕熄灭及亮起时添加操作(以屏蔽按键未例)

**Android framework中屏幕熄灭及亮起时添加操作**(以屏蔽按键未例)

前言


在做android机定制的过程中,由于机器屏幕唤醒时间较长,因此导致在屏幕未完全亮起时的按键被应用捕捉到,如果应用监听SCREEN_ON又需要修改较多内容。因此,寻求在framework中屏蔽掉屏幕未完全亮起时的按键操作。

源码分析


涉及文件:alps/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

interceptKeyBeforeQueueing函数顾名思义,是在按键加入队列之前进行拦截,因此,在该函数内添加屏幕是否完全唤醒的判断条件。
ps:函数中有对mSystemBooted变量的判断,当系统没有完全系统时,按键是被屏蔽掉的,可参考该变量完成。

PhoneWindowManager类实现接口WindowManagerPolicy,接口中提供相关函数如下:
startedGoingToSleep :开始睡眠操作
finishedGoingToSleep:完成睡眠操作
startedWakingUp:开始唤醒操作
finishedWakingUp:完成唤醒操作(此时屏幕已经亮起)

需求整改


添加自定义变量mWakeUpFinished,默认为false(否则第一次开机后,按键全部被屏蔽)
在interceptKeyBeforeQueueing接口中增加对mWakeUpFinished的判断
if (!mWakeUpFinished) {
    return;
}
在finishedGoingToSleep函数中将mWakeUpFinished变量值置为true
在finishedWakingUp函数中将mWakeUpFinished变量置为false

测试后发现,首次开机睡眠后,按键全部被屏蔽,因此对interceptKeyBeforeQueueing判断进行修改
if (!mWakeUpFinished && event.getKeyCode() != KeyEvent.KEYCODE_POWER) {
    return;
}

 编译内核后测试,屏幕未完全唤醒时,按键被屏蔽。

本人萌新,欢迎探讨。

你可能感兴趣的:(Android杂记)