版本比较

密钥

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。
目录
minLevel1
maxLevel3
outlinefalse
stylenone
typelist
printablefalse

Android系统的事件输入基于linux的Input子系统。触控屏事件和按键事件,从哪里输入又往哪里输出,虽然这个流程大部分对于Android系统来说是透明的,但是在多display,多窗口,多屏幕的情况下是值得研究的。

input对应各种输入事件,通过IMS,WMS,给到对应的window去处理事件,附一张最简化的事件传递流程:

image-20240207-064415.png

1、Android Input子系统简介

事件的输入

事件的输入,是从不同类获的设备得到不同的事件类型,事件类型也都是定义在/include/linux/input.h文件中。

代码块
languagebash
adb shell getevent -l -c 16
 
add device 1: /dev/input/event0       
  name:     "ACCDET"
add device 2: /dev/input/event3
  name:     "goodix_ts"
add device 3: /dev/input/event2
  name:     "aw8697_haptic"
add device 4: /dev/input/event1
  name:     "mtk-kpd"
   
//按键
adb shell getevent -l /dev/input/event1
EV_KEY       KEY_VOLUMEDOWN       DOWN
EV_SYN       SYN_REPORT           00000000
EV_KEY       KEY_VOLUMEDOWN       UP
EV_SYN       SYN_REPORT           00000000
EV_KEY       KEY_VOLUMEUP         DOWN
EV_SYN       SYN_REPORT           00000000
EV_KEY       KEY_VOLUMEUP         UP
EV_SYN       SYN_REPORT           00000000
 
//触摸
adb shell getevent -l /dev/input/event3
EV_ABS       ABS_MT_TRACKING_ID   0000036c
EV_ABS       ABS_MT_POSITION_X    000001fe
EV_ABS       ABS_MT_POSITION_Y    00000717
EV_KEY       BTN_TOUCH            DOWN
EV_SYN       SYN_REPORT           00000000
EV_ABS       ABS_MT_POSITION_X    00000207
EV_SYN       SYN_REPORT           00000000
EV_ABS       ABS_MT_POSITION_X    00000219
EV_ABS       ABS_MT_POSITION_Y    00000716