繁体   English   中英

Android:以编程方式检测设备是否已连接硬件触摸屏

[英]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.bustype
    • Vendor →id.vendor
    • Product →id.product
    • Version →id.version
  • N →设备名称
  • 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM