2016-08-30 3 views
21

Мне нужно написать сценарий, чтобы определить, подключен ли физический сенсорный экран к моему устройству Android во время загрузки. Я попытался перечислить содержимое папки /dev/input через ADB и я получаю следующий результат:Android: программно определить, подключено ли устройство к сенсорному экрану

[email protected]:/dev/input # ls 
event0 
event1 
event2 
event3 
event4 
mice 

Если я не ошибаюсь, event0 идентифицирует сенсорный экран, но это видно в обоих случаях сенсорный экран подключен или не.
Есть ли способ определить, подключен ли сенсорный экран к устройству?

Заранее спасибо.

+0

Я понятия не имею об этом, но если у меня есть предположение, что это будут «мыши», поскольку более важно (поведение разумно) касаться, касаться, перетаскивать, и т. Д. «Мышки» всегда видны тоже? – Yazan

+1

@Yazan К сожалению, «мыши» видны с сенсорным экраном или без него. – Stephan

ответ

3

Вы можете прочитать: /proc/bus/input/devices - get 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) 

Б в передних стойках для растрового изображения, N, P, S, U, H просто сначала письмо с соответствующим именем, а I - для ID. В упорядоченном моды:

  • I → @id: идентификатор устройства (структура INPUT_ID)
    • Bus → id.bustype
    • Vendor → id.vendor
    • Product → id.product
    • Version → id.версия
  • N → имя устройства
  • P → физического пути к устройству в системной иерархии
  • S → sysfs путь
  • U → уникального идентификационного кода для устройства (если устройство имеет его)
  • H → список входных ручек, связанных с устройством
  • B → растровые изображения
    • PROP свойства → устройств и причуды
    • EV → типов событий, поддерживаемых устройством
    • KEY → клавиши/кнопки это устройство имеет
    • MSC → различные события поддерживается устройством
    • LED → светодиоды на устройстве
    • REL → относительный адрес
    • ABS → абсолютный адрес

Чтобы проверить, если устройство действительно прилагается, вы можете попытаться имитировать события и посмотреть, если вы получаете какие-либо ошибки:

input tap [x] [y] 

Android поставляется с инструментом командной строки ввода, который может имитировать разные входные события.

  • вход → утилита командной строки для отправки событий
    • крана → действий
    • [х] → X координата на экране
    • [у] → Y координат на экране
+0

Спасибо за ответ, но, к сожалению, сенсорный экран виден даже если он физически не подключен. – Stephan

+0

@Stephan Затем попробуйте отправить событие на устройство и посмотреть, есть ли у вас ошибка. (Только что обновил мой ответ.) – Gerald

+1

'input' вводит события непосредственно в очередь событий входа в платформу Android - поэтому он не будет работать для проверки наличия физического сенсорного экрана –

2

Найдите имя драйвера для сенсорного контроллера вашего устройства. Затем проверьте его местоположение sysfs. Мало файлов, сопоставленных с внутренними переменными, которые были заполнены данными, считываемыми с физического сенсорного устройства во время его инициализации. Например, большинство сенсорных контроллеров имеют обновленную прошивку и предоставляют возможность запросить текущую версию.

В одном из моих устройств используется сенсорный контроллер atmel_mxt_ts, а его sysfs - /sys/bus/i2c/drivers/atmel_mxt_ts/1-004a/. В этой папке есть файл fw_version. Если физический сенсорный экран подключен, этот файл будет содержать текущую метку прошивки. Пустой файл будет означать, что нет сенсорного экрана.