Android 去掉Power键按钮 锁屏界面 休眠时间

本文详细介绍了如何通过修改代码、配置文件以及系统设置来实现Android设备的休眠时间调整、开机不锁屏和禁用物理电源键锁屏功能。通过深入分析关键代码段,用户可以定制自己的设备体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、休眠时间,有的方案可能是在device目录下的补丁修改 比如Amlogic

frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java

private void loadSystemSettings(SQLiteDatabase db) {
loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
                    R.integer.def_screen_off_timeout);
frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<integer name="def_screen_off_timeout">-1</integer>

以毫秒为单位,设为-1即可,重新编译Setting Provider模块
但是只是这样修改的话,启动后依旧会进入锁屏状态,解锁之后就再也不会锁屏了

二、开机不锁屏
frameworks/base/policy/src/com/android/internal/policy/impl/KeyguardViewMediator.java
    /**
     * External apps (like the phone app) can tell us to disable the keygaurd.
     */
    private boolean mExternallyEnabled = true;
改为false
$ source build/envsetup.sh
$ mmm frameworks/base/policy/
Install: out/target/product/generic/data/app/FrameworkPolicyTests.apk
为了打开锁屏功能,可调用函数setKeyguardEnabled()

三、Power键按钮

frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

3870行,注释掉这个case;

 case KeyEvent.KEYCODE_POWER: {
            /*
                result &= ~ACTION_PASS_TO_USER;
                if (down) {
                    if (isScreenOn && !mPowerKeyTriggered
                            && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) {
                        ..
                }
               */
                break;

}

<think>我们正在处理一个关于Android系统中Power按下亮流程的问题,特别是针对Android 16(即Android 4.1.x Jelly Bean)版本。根据提供的引用,我们可以梳理出一些关点,并结合Android系统的一般知识来回答。 在Android系统中,按事件的处理涉及多个层次。从提供的引用中,我们可以知道: - 按事件首先由InputManagerService处理,然后传递到PhoneWindowManager的interceptKeyBeforeQueueing方法(引用[2])。 - 在亮时按Power,会触发延迟的MSG_POWER_LONG_PRESS消息(引用[1])。 - 在PowerManagerService中,会调用userActivityNoUpdateLocked方法来记录用户活动(引用[3])。 - 系统启动时会加载硬件服务(引用[4]),但这个问题主要关注按事件流程。 因此,我们重点分析从Power按下到亮的流程,涉及的类和调用顺序。 ### Android 16中Power流程 1. **InputManagerService**:当Power按下时,硬件事件首先到达InputManagerService,它负责将原始输入事件分发给窗口。 2. **PhoneWindowManager**:InputManagerService会将事件传递给PhoneWindowManager的`interceptKeyBeforeQueueing`方法。这个方法在事件进入队列之前进行拦截处理,对于Power,它会进行特殊处理。 - 在`interceptKeyBeforeQueueing`中,会判断按是按下还是抬起,以及按的长按和短按。 - 对于短按Power,它会触发亮(根据当前幕状态)。 3. **PowerManagerService**:PhoneWindowManager会调用PowerManagerService的方法来控制电源状态。 - 当需要亮时,会调用`PowerManagerService.wakeUp(...)`方法。 - 在亮过程中,会调用`userActivityNoUpdateLocked`来更新用户活动时间(引用[3])。 4. **DisplayPowerController**:PowerManagerService会通过DisplayPowerController来控制幕的电源状态。 - DisplayPowerController负责幕的亮度、背光等控制。 5. **WindowManagerService**:在幕状态改变后,WindowManagerService会负责更新窗口状态,例如解幕、显示界面等。 ### 调用顺序 1. `InputReader`(在InputManagerService中)读取输入事件,并通过`InputDispatcher`分发。 2. 事件到达`PhoneWindowManager.interceptKeyBeforeQueueing`。 3. 对于Power按下事件: - 如果是短按,且当前幕是关闭状态,则调用`PowerManagerService.wakeUp`。 4. `PowerManagerService.wakeUp`方法会调用`wakeUpInternal`,然后通过`DisplayPowerController`请求幕打开。 5. `DisplayPowerController`会更新幕状态,并通知`PowerManagerService`更新电源状态。 6. 同时,`PowerManagerService`会通过`WindowManagerService`来更新窗口策略,例如显示界面。 ### 涉及的类 - `InputManagerService`:输入事件管理。 - `PhoneWindowManager`:处理按事件,决定按行为。 - `PowerManagerService`:电源管理服务,控制唤醒和休眠。 - `DisplayPowerController`:控制显示设备的电源状态。 - `WindowManagerService`:管理窗口状态和策略。 ### 详细流程 1. **按事件捕获**:硬件中断触发,内核将事件传递给Android的EventHub,然后由InputReader读取并生成KeyEvent。 2. **事件预处理**:InputDispatcher将事件发送到PhoneWindowManager的`interceptKeyBeforeQueueing`方法。 3. **Power处理**: - 在`PhoneWindowManager.interceptKeyBeforeQueueing`中,检测到Power按下,且当前幕关闭(或需要唤醒),则调用`PowerManagerService.wakeUp`。 4. **唤醒幕**: - `PowerManagerService.wakeUp`会获取唤醒,并调用`DisplayPowerController.requestPowerState`来请求幕开启。 - `DisplayPowerController`处理幕开启流程,包括背光控制、亮度调整等。 5. **更新用户界面**:幕亮起后,WindowManagerService会显示界面(如果设置了)。 ### 注意事项 - 在Android 4.1中,流程可能还涉及其他辅助类,但上述类是核心。 - 长按Power的处理:如果在规定时间内未释放,则触发长按事件(如显示关机菜单),这由`MSG_POWER_LONG_PRESS`消息处理(引用[1])。 以上流程基于Android 4.1的源代码以及提供的引用信息整理。 §§相关问题§§ 1. Android系统中,除了Power,其他按(如音量)的处理流程是怎样的? 2. 如何修改Power的长按时间? 3. 在亮过程中,如何优化亮速度? 4. 亮界面是如何显示的?</think>### Android 16(4.1.x)Power流程分析 在Android 4.1系统中,按下Power触发亮涉及多个系统服务和组件的协作,以下是核心类及调用顺序: #### 核心类及作用 1. **`PhoneWindowManager`** - 入口类,接收输入事件并决定Power行为(短按/长按)。 - 关方法:`interceptKeyBeforeQueueing()` ```java public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) { if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) { handlePowerKey(event); // 处理Power逻辑 } } ``` 2. **`PowerManagerService`** - 电源管理核心服务,控制幕唤醒/休眠。 - 关方法: - `wakeUp()`:触发亮 - `userActivityNoUpdateLocked()`:记录用户活动事件(引用[3]) 3. **`DisplayPowerController`** - 控制幕背光(LCD)和电源状态切换。 - 响应`PowerManagerService`的亮请求。 4. **`WindowManagerService`** - 管理窗口状态,在亮后更新UI(如解界面)。 5. **`InputManagerService`** - 将物理按事件传递给`PhoneWindowManager`(引用[2])。 --- #### 调用流程(按下Power) 1. **硬件层 → InputManagerService** 物理按事件通过Linux内核传递到`InputManagerService`。 2. **InputManagerService → PhoneWindowManager** 调用`interceptKeyBeforeQueueing()`处理Power(引用[2]): - 短按Power:直接触发亮。 - 长按Power:发送`MSG_POWER_LONG_PRESS`消息(引用[1])。 3. **PhoneWindowManager → PowerManagerService** 调用`PowerManagerService.wakeUp()`请求唤醒幕: ```java // 伪代码 powerManagerService.wakeUp(SystemClock.uptimeMillis()); ``` 4. **PowerManagerService → DisplayPowerController** - 更新电源状态(`userActivityNoUpdateLocked()`记录事件,引用[3])。 - 通过`DisplayPowerController`开启背光(Button Light)和LCD(引用[3])。 5. **幕亮起 → WindowManagerService** - 更新窗口状态(如显示界面)。 - 通知`ActivityManagerService`恢复前台Activity。 --- #### 时序图关节点 ```plaintext 1. InputManagerService └── 分发按事件 2. PhoneWindowManager.interceptKeyBeforeQueueing() └── 判断短按 → 调用PowerManagerService.wakeUp() 3. PowerManagerService ├── userActivityNoUpdateLocked() // 更新用户活动 └── 通知DisplayPowerController 4. DisplayPowerController ├── 开启背光 (Button Light) └── 开启LCD幕 5. WindowManagerService └── 更新UI(/主界面) ``` > ⚠️ **卡顿问题**:在Android 4.1中,背光(Button Light)和LCD的开启可能存在时序问题,导致视觉卡顿(引用[3])。优化方案通常需调整`DisplayPowerController`中的延时参数。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值