[英]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.