业界动态
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/ , 查看更多   
最新文章
九项世界第一!外媒盛赞华为P40系列:2020最好的拍照旗舰dxomark手机拍照排名「九项世界第一!外媒盛赞华为P40系列:2020最好的拍照旗舰」
3月26日晚,华为P40系列全球首发,华为P40、P40 Pro、P40 Pro+三款全新机型同台登场,外观设计、性能、系统全面升级,并以九项世
我的世界朱紫宝可梦我的世界神奇宝贝手机版下载「我的世界朱紫宝可梦」
我的世界朱紫宝可梦是一款融合了宝可梦朱紫元素的“我的世界”mod新模组,用沙盒方块把一只只宝可梦活灵活现的表现出来,同时也
2023游戏盒子排行榜前十名推荐手机游戏盒子「2023游戏盒子排行榜前十名推荐」
2023游戏盒子排行榜前十名是哪前十名呢,这前十名有这么好用吗,很多小伙伴想知道,这样选择的时候就会不太困难,下面就跟着小编
小米手机开机键失灵,恢复唤醒方式小米手机开机键坏了怎么开机「小米手机开机键失灵,恢复唤醒方式」
小米手机作为一款性价比极高的智能手机,受到了广大用户的青睐。在使用过程中,也可能会遇到一些问题,比如开机键失灵。开机键失
旧手机上的数据导入到新手机教程旧手机数据导入新手机「旧手机上的数据导入到新手机教程」
由于现在手机更新换代非常快,因此很多人每过个2-3年的时间就会给自己换一部新手机。而换手机之后最大的麻烦就是怎么把旧手机上
vivo主题商店最新版(i主题)安卓手机主题「vivo主题商店最新版(i主题)」
vivo主题商店免费版,即i主题,这是很多vivo手机自带的主题壁纸软件,用户可以在app上自由挑选自己喜爱的静态、动态壁纸,超多主
华为授权体验店(南水街店)珠海手机「华为授权体验店(南水街店)」
华为授权体验店(南水街店),联系电话:0756-7711179,地址位于南水镇南水街9-10号铺,靠近南桥路、浪白路、南港二街和浪白西路。
21:9屏幕:智能手机的新“健身成果”手机屏幕比例「21:9屏幕:智能手机的新“健身成果”」
“你最喜欢什么尺寸、比例的手机屏幕?” 这个问题如同评价耳机音质一般充满了玄学,一句“合适就好”的背后充满了不确定性。从
小米新旗舰Mi6开箱+大型玩机攻略小米手机保护套「小米新旗舰Mi6开箱+大型玩机攻略」
追加修改(2017-07-06 21:27:30):7月3日我编辑完文档之后就提交了,提交后再次阅读的时候发现文中一个错误,但是此时已经不能修改
GTS神奇手机神奇手机「GTS神奇手机」
本文才用第一人称视角来写,第一次写,不喜勿喷。如有相似的文章,纯属巧合。我叫林雪 身高:130cm体重:50斤 胸围:A--(可以看成是
相关文章