【Android12】【PhoneWindowManager】组合按键长按实现重启功能(Power+Volume Up)

PhoneWindowManager 是什么?

PWM负责Window System与framework的通信,处理与设备展示相关的事件。包括窗口管理,触摸事件,点击事件,以及Power键相关的事件处理。

什么是组合按键?

顾名思义就是两个或多个按键一起摁后实现的功能。例如手机Power键+Volume Down一起按后实现的截图功能。

那什么是组合按键长按功能?

就是两个按键同时按下多少秒后执行的功能,例如我们这一篇所要展开的主题:Power+Volume Up同时摁下5秒后重启机器。

实现思路

1)记录下第一个按键的按下时间,长按时间达到5s后执行重启操作。

这个方法中需要做的事情还是挺多的,例如记下第一个按键的按下时间,还要判断第二个按钮按下的时间是否在两个按钮的按下间隔时间内,还要在按下的途中判断是否摁住了5s且同时摁住等操作。

2)利用PhoneWindowManager中的接口实现功能。

这一篇要讲的也就是这个方法了,如果有对比过PhoneWindowManager源码的同学就发现了,在Android12中,谷歌对PhoneWindowManager做了很大的优化和改进,其中引进了KeyCombinationManager类中的TwoKeysCombinationRule方法,这个方法就是提供给两个按键同时摁下实现功能的,所以我们从这里入手实现功能。

分析过程

1)寻找到按键实现的地方

我们可以在PhoneWindowManagerinit()中找到初始化组合按键规则的方法initKeyCombinationRules(),就是下图中红色框出的代码。
另外绿色框出的代码片就是处理两个键组合的执行计划。
在这里插入图片描述

2)分析对应的方法有什么用,且在什么时候执行。

其中上图的绿色框中TwoKeysCombinationRule的使用方法如下:
根据其中的注释可以一一解释每个方法的用法,
preCondition():检查是否需要拦截按键,前置条件,(需要注意的是:这个方法不仅仅被注册的两个按键会触发,其他组合按键、单个按键摁下也会执行到这个方法)。
execute():触发动作,也就是我们需要组合按键执行的内容。
cancel():取消动作。这个方法是两个按键一起摁下后抬起后才会执行此方法。
在这里插入图片描述

实现结果

首先在PhoneWindowManager实现一个线程来执行重启的操作:

	private final RebootRunnable mRebootRunnable = new RebootRunnable();
	// 实现重启的线程方法
    private class RebootRunnable 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值