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

时间:2016-08-30 16:30:31

标签: android touchscreen

我需要编写一个脚本来检测物理触摸屏是否在启动时连接到我的Android设备。 我尝试通过adb列出文件夹/dev/input的内容,并获得以下输出:

root@q88:/dev/input # ls
event0
event1
event2
event3
event4
mice

如果我没有弄错的话,event0会识别触摸屏,但无论是否连接触摸屏都可以看到它。
有没有办法检测触摸屏是否连接到设备?

提前致谢。

2 个答案:

答案 0 :(得分:3)

您可以阅读/proc/bus/input/devicesget details of your existing 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只是第一个   相应名称值的字母,我是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附带一个输入命令行工具,可以模拟各种输入事件。

     
      
  • 输入→命令行工具发送事件      
        
    • 点按→操作
    •   
    • [x]→屏幕上的X坐标
    •   
    • [y]→屏幕上的Y坐标
    •   
  •   

答案 1 :(得分:2)

查找设备的触摸控制器的驱动程序名称。然后检查其sysfs位置。将几乎没有文件映射到内部变量,这些内部变量填充了在初始化期间从物理触摸屏设备读取的数据。例如,大多数触摸屏控制器都具有可更新的固件,并提供了查询其当前版本的方法。

我的某个设备使用atmel_mxt_ts触摸屏控制器,其sysfs位置为/sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/。该文件夹中有一个fw_version文件。如果物理触摸屏已连接,则该文件将包含当前固件标签。空文件意味着没有触摸屏。