簡體   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