请求getevent时,为什么我没有在某些有根的Android设备上收到“EV_KEY”事件?

问题描述 投票:3回答:1

我使用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版本?我怎么能解决这个问题呢?还有其他方法可以独立接收触摸事件吗?

android linux-kernel touch root
1个回答
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版本中的代码处理此问题,该代码可以从系统属性中读取。

希望这能回答您的疑问。

© www.soinside.com 2019 - 2024. All rights reserved.