[英]Android: Programmatically detect if device has hardware touchscreen connected
我需要编写一个脚本来检测物理触摸屏是否在启动时连接到我的Android设备。 我试图通过adb列出文件夹/dev/input
的内容,并获得以下输出:
root@q88:/dev/input # ls
event0
event1
event2
event3
event4
mice
如果我没有弄错的话, event0
识别触摸屏,但在触摸屏连接与否的情况下都可以看到。
有没有办法检测触摸屏是否连接到设备?
提前致谢。
您可以读取/proc/bus/input/devices
以获取现有输入设备的详细信息 。
根据您的硬件名称,您可以执行类似的操作并检查是否有任何输出:
cat /proc/bus/input/devices | grep "Name=" | grep "Touch"
这是/proc/bus/input/devices
的完整输出:
I: Bus=0011 Vendor=0002 Product=0008 Version=2222
N: Name="AlpsPS/2 ALPS DualPoint TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/class/input/input2
H: Handlers=mouse1 event2 ts1
B: EV=f
B: KEY=420 0 70000 0 0 0 0 0 0 0 0
B: REL=3
B: ABS=1000003
[...] (blank line, next device)
前面的B代表位图,N,P,S,U,H只是相应名称值的第一个字母,而I代表ID。 有序的方式:
I
→@ id:设备的id(struct input_id)
Bus
→id.bustypeVendor
→id.vendorProduct
→id.productVersion
→id.versionN
→设备名称P
→系统层次结构中设备的物理路径S
→sysfs路径U
→设备的唯一识别码(如果设备有)H
→与设备关联的输入句柄列表B
→位图
PROP
→设备属性和怪癖EV
→设备支持的事件类型KEY
→此设备具有的按键/按钮MSC
→设备支持的杂项事件LED
→LED存在于设备上REL
→相对地址ABS
→绝对地址
要测试设备是否实际连接,您可以尝试模拟事件并查看是否有任何错误:
input tap [x] [y]
Android附带一个输入命令行工具,可以模拟各种输入事件。
- input →用于发送事件的命令行工具
- 点按→动作
- [x]→屏幕上的X坐标
- [y]→屏幕上的Y坐标
查找设备的触摸控制器的驱动程序名称。 然后检查其sysfs
位置。 将几乎没有文件映射到内部变量,这些内部变量填充了在初始化期间从物理触摸屏设备读取的数据。 例如,大多数触摸屏控制器具有可更新的固件并提供查询其当前版本的方式。
我的一个设备使用atmel_mxt_ts
触摸屏控制器,其sysfs
位置是/sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/
。 该文件夹中有一个fw_version
文件。 如果物理触摸屏已连接,则该文件将包含当前固件标签。 空文件意味着没有触摸屏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.