Имитировать USB/Bluetooth HID-устройство локально для ввода событий?
Можно ли смоделировать устройство USB или Bluetooth, подключенное к Android?
Я хотел бы сделать приложение, способное имитировать HID-устройство локально. Я имею в виду: приложение должно заставить Android полагать, что подключено устройство USB/Bluetooth HID. Надеюсь, это позволит моему приложению вводить события касания во всем мире. Нужно ли вообще имитировать (виртуальное) устройство? Обратите внимание, что я действительно не забочусь об устройстве, я просто хочу использовать встроенную поддержку ввода HID.
Я знаю, что многие люди уже спрашивали о инъекциях сенсорных событий, но этот подход кажется немного другим. Я не хочу использовать это для целей тестирования, поэтому InstrumentationTestCase и тому подобное не помогут.
Коррекция устройства может быть вариантом, хотя я также могу предположить, что мои конечные пользователи могут установить специально подписанное приложение вручную (в соответствии с qaru.site/info/293182/... и qaru.site/info/73388/..., но это будет специфично для устройства).
Я знаю:
Обратите внимание, что я не хочу превращать свой телефон в HID-устройство любого типа.
Ответы
Ответ 1
Имитация - это широкий термин. Когда я создал свое приложение Bluetooth, я "смоделировал" Bluetooth-соединение двумя способами.
Затем вы можете использовать терминальную программу, например CoolTerm, чтобы отправить свои данные.
Как так. В этом случае я закодирован в строке для отправки по успешному соединению с устройством, однако вы можете сделать бесконечный цикл для целей тестирования, не требуя, чтобы ваш телефон был превращен в устройство HID.
Способ 2 (не просто): используйте Bluetooth-устройства своих компьютеров в модели relashionship сервера/клиента.
Это сложнее сделать. Что вы можете сделать, это преобразовать ваш ПК /Mac в сервер и телефон Android в клиент или наоборот. Для этого вам нужно будет написать внешний код, который нужно будет компилировать отдельно на jvm (java virtual machine). Процедуру для этого можно найти здесь. Если вы используете Linux-машину, вам необходимо отдельно загрузить модуль Bluez. Я не пробовал это на любой другой операционной системе, кроме Ubuntu, и было больно получить функциональность.
Надеюсь, это помогло.
Ответ 2
Да, довольно легко использовать протокол AOA2 для проверки this и this для получения подробной информации (вам нужно переключить устройство в режим аксессуаров)
Ответ 3
Это может быть возможно (или, по крайней мере, проще) с помощью библиотеки Robolectric, которая имитирует полное Android-устройство локально. Хотя он предназначен в первую очередь для тестирования, тот факт, что он имитирует целое устройство локально - в том числе Bluetooth, а USB - означает, что добавление к нему может быть более легкий подход.
Другими словами, вы можете модифицировать классы, которые он использует, чтобы имитировать эти способности локально (например, в самой IDE без эмулятора или устройства), чтобы имитировать их на самом устройстве. В конце концов, он обеспечивает полное моделирование этих функций. Вы можете просто изменить эти классы Bluetooth и USB-имитации для загрузки на самом устройстве, а не на локальное тестовое устройство Robolectric.
Это всего лишь идея, но я не могу подтвердить, что это сработает - это может быть хорошим местом для вас.