业界动态
InputManagerService实体按键及组合按键-Android12手机按键「InputManagerService实体按键及组合按键-Android12」
2025-01-12 20:56

InputManagerService启动-Android12
InputReader线程获取输入事件-Android12
InputDispatcher线程分发事件-Android12
InputChannel通道建立-Android12
InputChannel发送Input给App-Android12


一般手机侧边有三个实体按键power开关机键、音量上键、音量下键

  • KEYCODE_POWER = 26
    对应scancode码
  • KEYCODE_VOLUME_UP = 24
    对应scancode码
  • KEYCODE_VOLUME_DOWN = 25
    对应scancode码

1.1 实体按键添加

IMS:EventHub 设备添加和InputDevice转化 手机实体按键其实也是添加设备。其中关键方法、

 

1.2 从dumpsys input信息查看

下面是cepheus_input.txt(小米9机器,查看下面两个dump()信息
frameworks/native/services/inputflinger/reader/InputReader.cpp中InputReader::dump()
frameworks/native/services/inputflinger/reader/EventHub.cpp中EventHub::dump()
frameworks/native/services/inputflinger/reader/InputDevice.cpp中InputDevice::dump()
frameworks/native/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp中KeyboardInputMapper::dump()

在这里插入图片描述 在这里插入图片描述

设备表示Classes码
添加的设备节点
按键布局kl文件用来完成映射过程
kcm文件转化为显示在文本框的字符
与Classes码对应的Sources码
添加对应InputMapper文件:frameworks/native/services/inputflinger/reader/mapper/KeyboardInputMapper.cpp

具体功能实现位置在 IMS:Input事件可拦截位置

  • 添加队列之前拦截
  • 发送之前拦截

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java#interceptKeyBeforeQueueing

 

2.1 没有启动完成KeyEvents不做任何事情,其中KEYCODE_POWER例外

如果我们还没有启动完成,KeyEvents不做任何事情。
例外:唤醒和电源键KeyEvents事件被转发到PowerManager,以允许它在引导期间从静态模式唤醒。

 

2.2 双击power键启动相机

Android S上 新增改变,注释解释为了解决多屏显示的场景下出现错误的状态

  • 处理启动相机,最终调用
    在这里插入图片描述
  • 中计算判断
    在这里插入图片描述
  • 注册到StatusBarManagerService
    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
  • 功能开关判断
 
 

frameworks/base/services/core/java/com/android/server/GestureLauncherService.java

 

2.3 五次点击power键启动SOS紧急呼叫

在 发现 中有,也是通过GestureLauncherServiceStatusBarManagerService服务调用到StatusBar.java中onEmergencyActionLaunchGestureDetected(),不同的是需要5次()点击power键
在这里插入图片描述
在这里插入图片描述

  • 功能开关
  • 有个疑问,不知道为什么这样设计,这里是优先处理

2.4 power长按功能 ,如唤起语音助手、关机、重启等弹框

回到 power键处理

  • PhoneWindowManager.java初始化是在initSingleKeyGestureRules中添加new PowerKeyRule(powerKeyGestures)
  • 长按调用PowerKeyRule中,powerLongPress(eventTime)处理长按功能
  1. 唤醒助手界面launchAssistAction()
  2. 唤醒语音助手launchVoiceAssist
  3. 弹出关机、重启、飞行模式等选项对话框showGlobalActions()
  4. 关闭所有窗口,执行
  • config_LongPressOnPowerBehavior配置值
    在这里插入图片描述

frameworks/base/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java

 

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

 

2.5 power键亮灭屏

接着查看power键点击亮灭屏,按下interceptKeyDown 抬起interceptKeyUp;关注抬起后操作未触发长按继续处理,可能是多次点击power键延时处理,看到onPress()onMultiPress()最终都是调用,这里没有处理通知亮屏逻辑。

  • 延时时间,默认时间是
    在这里插入图片描述
  • 查看时,mShortPressOnPowerBehavior基本有两种行为动作
  1. 灭屏sleepDefaultDisplayFromPowerButton()
  2. 回到HOME桌面
  • config_shortPressOnPowerBehavior配置值
    在这里插入图片描述

frameworks/base/services/core/java/com/android/server/policy/SingleKeyGestureDetector.java

 

frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

 
2.5.1 power键亮屏

Android S上 新增改变处理等事件,优先处理,继续查看代码,发现PhoneWindowManager.java中有power键处理,亮屏处理就是在interceptPowerKeyDown()中

  • 持有power的WakeLock
  • wakeUp亮屏
 

2.6 音量上下键调节音量KEYCODE_VOLUME_DOWNKEYCODE_VOLUME_UP

这个一般就是耳机上的按键,主要控制音乐暂停播放等。这里主要查看KEYCODE_VOLUME_DOWNKEYCODE_VOLUME_UP按键

  • 通知到SystemUI中,这里看到只有按下DOWN时通知,没有看到抬起UP时通知
  • 调用MediaSessionService.java#dispatchVolumeKeyEvent()调节音量
 
 

在此查看handleKeyGesture方法,优先处理;下面具体查看组合按键规则添加

 

3.1 POWER+VOLUME_DOWN截图功能

添加,截图

 

3.2 VOLUME_DOWN+VOLUME_UP辅助功能快捷方式

添加,执行激活辅助功能

 

3.3 POWER+VOLUME_UP 静音

添加,执行执行中区分两种行为

  • 执行 设置 静音模式RINGER_MODE_SILENT
  • 执行 弹出关机、重启、飞行模式等选项对话框;power长按功能中也有行为实现该功能
    以上就是本篇文章【InputManagerService实体按键及组合按键-Android12手机按键「InputManagerService实体按键及组合按键-Android12」】的全部内容了,欢迎阅览 ! 文章地址:http://keair.bhha.com.cn/news/6999.html 
     文章      相关文章      动态      同类文章      热门文章      栏目首页      网站地图      返回首页 康宝晨移动站 http://keair.bhha.com.cn/mobile/ , 查看更多   
最新文章
向日葵不仅远控了长虹 也能远程控制乐视TV乐视手机官网「向日葵不仅远控了长虹 也能远程控制乐视TV」
前段时间,向日葵已经和长虹达成了战略合作,将向日葵远程控制软件嵌入了长虹智能电视,解决了长虹厂商的维修问题,成功将智能电
TRS WAS 5夏新手机「TRS WAS 5」
英才:刘志军复活夏新  文|本刊记者孙瑜/图|松涛  坐在《英才》记者对面的刘志军已不再是联想的职业经理人,而是一位创业者
InputManagerService实体按键及组合按键-Android12手机按键「InputManagerService实体按键及组合按键-Android12」
InputManagerService启动-Android12 InputReader线程获取输入事件-Android12 InputDispatcher线程分发事件-Android12 InputChann
iPhone4s现在还能用吗,iphone4s过时了吗苹果4s手机「iPhone4s现在还能用吗,iphone4s过时了吗」
iphone4s现在还能用吗iphone4s现在已经不能用了,因为按照苹果公司的惯例,一款产品停产五年后就要进入淘汰期。iphone4s于北京时
华为手机的密码解锁详细步骤及特殊情况处理华为手机解锁「华为手机的密码解锁详细步骤及特殊情况处理」
华为手机解锁密码的详细步骤大家好,今天我来给大家介绍一下华为手机如何解锁密码。有时候我们会忘记密码或者遇到需要重置密码的
为什么选择安卓手机?盘点安卓手机九大优点android手机「为什么选择安卓手机?盘点安卓手机九大优点」
苹果公司是科技行业的领导者,拥有坚实的声誉和令人垂涎的产品。尽管如此,截至2016年第二季度,Android在智能手机销量中占据了
原生鸿蒙 麒麟芯下放,华为新品放大招华为手机新品「原生鸿蒙 麒麟芯下放,华为新品放大招」
近日,一款型号为HUAWEI BRE-AL80的华为旗下新机现身了Geekbench跑分。在Geekbench 6.3.0 for Android AArch64基准下,单核成绩9
iFi Diablo这台大菠萝,简直就是给手机用户准备的单兵大炮!菠萝手机「iFi Diablo这台大菠萝,简直就是给手机用户准备的单兵大炮!」
现如今什么设备听歌最方便?那肯定是手机,手机操作起来那么顺手,能装的App如此丰富,取之不尽的流媒体资源,什么国砖啦网播啦
【十万个为什么】手机是谁发明的?手机是谁发明的「【十万个为什么】手机是谁发明的?」
《十万个为什么》是少年儿童出版社在20世纪60年代初编辑出版的一套青少年科普读物,最新版本是第六版,第六版总主编是韩启德。50
Firefox怎么样火狐浏览器手机版「Firefox怎么样」
  火狐浏览器浏览器是全球知名浏览器,在全球市场份额中仅此于微软IE浏览器,排名第二。火狐浏览器在全球虽然占据市场第二的位
相关文章