我使用root用户设备在我的大学学习。 因此,我需要在设备上记录触摸事件,而与应用程序无关。
我用输出流实现了这个,我发送:
getevent -lt /dev/input/event3 \n
(事件对应于触摸屏)。
这对我的设备Samsung S4 Android 4.3非常有用。
不幸的是,我在其他一些具有不同Android版本(高于4.3)的设备上进行了测试,我错过了一个重要事件EV_KEY
,这是一个重要的事件。向下意味着手指开始触摸屏幕并释放它。
这是我在三星S4上触摸按键的反应:
[ 12972.567843] EV_KEY BTN_TOUCH DOWN
[ 12972.567873] EV_ABS ABS_MT_POSITION_X 000002ae
[ 12972.567873] EV_ABS ABS_MT_POSITION_Y 0000052f
[ 12972.567904] EV_ABS ABS_MT_TOUCH_MAJOR 00000012
[ 12972.567934] EV_ABS ABS_MT_TOUCH_MINOR 00000009
[ 12972.567934] EV_ABS ABS_MT_WIDTH_MAJOR 00000002
[ 12972.567965] EV_ABS 003c 00000000
[ 12972.568087] EV_SYN SYN_REPORT 00000000
[ 12972.584658] EV_ABS ABS_MT_TOUCH_MAJOR 0000001b
[ 12972.584688] EV_ABS ABS_MT_TOUCH_MINOR 0000001b
[ 12972.584688] EV_ABS ABS_MT_WIDTH_MAJOR 00000008
[ 12972.584688] EV_ABS 003c fffffffe
[ 12972.584719] EV_SYN SYN_REPORT 00000000
[ 12972.606325] EV_ABS 003c fffffff9
[ 12972.606356] EV_SYN SYN_REPORT 00000000
[ 12972.627444] EV_ABS ABS_MT_TRACKING_ID ffffffff
[ 12972.627505] EV_KEY BTN_TOUCH UP
这是我在其他设备上得到的回复:
[ 3078.948355] EV_SYN SYN_REPORT 00000000
[ 3079.162730] EV_ABS ABS_MT_TRACKING_ID 000003a3
[ 3079.162821] EV_ABS ABS_MT_POSITION_X 00000404
[ 3079.162882] EV_ABS ABS_MT_POSITION_Y 0000043d
[ 3079.162913] EV_ABS ABS_MT_PRESSURE 0000003b
有谁知道为什么我没有得到EV_KEY
事件?
是否适用于Android版本?
我怎么能解决这个问题呢?
还有其他方法可以独立接收触摸事件吗?
答案 0 :(得分:1)
在android getevent中,api用于列出由注册到输入子系统/dev/input/*
的设备生成的事件。
为了向用户空间发送事件,第一个设备驱动程序需要注册以输入需要发送到用户空间的事件类型的susbsystem。例如。 EV_ABS,EV_REL, EV_KEY
等。然后使用硬件事件上的输入子系统将事件从驱动程序发送到/ dev / input / eventN。
因此,驱动程序可自行决定发送任何类型的事件,条件是它应将事件类型设置为输入层以避免事件过滤。
在你的情况下,EV_KEY事件不会进入下一个Android版本。由于驱动程序更改,它正在发生。
因为当任何设备升级到更新的Android版本时。从OEM的角度来看,他们倾向于使用触摸,传感器等最新的驱动程序,因为通常OEM购买touch ic,来自不同供应商的传感器ic,如synaptics,bosch和这些供应商不断更新其驱动程序/软件层以确保更好的性能。
这种方式当设备获得新的操作系统时。有时界面,事件类型会发生变化 对于应用程序开发,您可以使用Android版本中的代码处理此问题,该代码可以从系统属性中读取。
希望这可以回答您的问题。