推广 热搜: 公司  快速  中国  上海    未来  企业  政策  教师  系统 

InputManagerService实体按键及组合按键-Android12手机按键「InputManagerService实体按键及组合按键-Android12」

   日期:2025-01-12     作者:j8ngui    caijiyuan   评论:0    移动:http://keair.bhha.com.cn/mobile/news/6999.html
核心提示:InputManagerService启动-Android12 InputReader线程获取输入事件-Android12 InputDispatcher线程分发事件-Android12 InputChann

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长按功能中也有行为实现该功能
本文地址:http://keair.bhha.com.cn/news/6999.html    康宝晨 http://keair.bhha.com.cn/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类最新资讯
0相关评论

文章列表
相关文章
最新动态
推荐图文
最新资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备2023022329号