【问题标题】:Android: Programmatically detect if device has hardware touchscreen connectedAndroid:以编程方式检测设备是否连接了硬件触摸屏
【发布时间】:2016-08-30 16:30:31
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 我对此一无所知,但如果我猜测它会是mice,因为触摸、点击、拖动等更相关(行为明智)是@987654325 @ 也总是可见?
  • @Yazan 不幸的是,mice 在有或没有触摸屏的情况下都是可见的。

标签: android touchscreen


【解决方案1】:

您可以阅读/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就是简单的在前 对应名称值中的字母,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 坐标

【讨论】:

  • 感谢您的回复,但不幸的是,即使没有物理连接,触摸屏也是可见的。
  • @Stephan 然后尝试向设备发送一个事件,看看是否有错误返回。 (刚刚更新了我的答案。)
  • input 将事件直接注入 Android 框架输入事件队列 - 因此它无法用于测试物理触摸屏的存在
  • @AlexP。这很有意义..您是否知道任何其他方法来检查触摸屏是否已连接?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    相关资源
    最近更新 更多