Как запрограммировать событие click на Android
Я не являюсь носителем английского языка, поэтому, пожалуйста, попробуйте игнорировать грамматические/орфографические ошибки или указать их в комментариях для улучшения вопроса.
Быстрая версия:
Как я могу вызвать событие, связанное с касанием экрана в заданной координате, независимо от состояния устройства?
Более длинная версия: моя проблема:
У меня есть пользователи, которые не могут коснуться устройства (им не хватает движения тела из-за
церебрального паралича или
штрихи). Затем я создаю устройство, которое контролирует другие типы ввода (например, сокращение мышц или даже жужжание горла, среди прочего).
Важная часть состоит в том, что у меня есть схема, которая испускает одну команду.
Затем эти команды должны быть перехвачены устройством Android и выполнить связанную с ним команду, как если бы пользователь обычно работал с устройством.
Обратите внимание на следующее: У меня не будет активности. Цель приложения - связать датчик с устройством, и поэтому я не могу использовать элементы View.
Я предполагаю, что я хочу выполнить элемент mouse-like
для Android.
Но у меня не было никакого способа, чтобы приложение выполнялось внутри моего собственного (где я бы предоставил автоматическую движущуюся "цель" для пользователя, чтобы выпустить команду/клик) или способ выполнить MotionEvent или KeyEvent.
Пока мои исследования пока не вызвали никакого ответа, я хотел бы спросить следующее: забываю ли я какую-либо часть или директиву системы, которая могла бы позволить мне выполнить мою задачу?
Конечным результатом является Служба, эта услуга просто ждет сигнала, это захватывает приемник... вот где я застрял.
Спасибо за ваше время.
Ответы
Ответ 1
Я собираюсь ввести здесь ответ, чтобы показать альтернативы для людей, которые могут иметь похожие проблемы.
С самого начала устройство является автономным объектом, который выдает запросы GET на внутренний веб-сервер на устройстве Android (я использую PAW server на сегодня, 26/10/15), и я могу выпустить несколько простых команд.
Аналогично, я планирую выполнить операцию с WebView и курсором, который продолжает двигаться, и когда сигнал полученный, он использует onTouchEvent подстраиваемого объекта под ним (все еще изучает).
Я понимаю "недостаток" безопасности от того, что я пытаюсь сделать, но даже USB HID (Universal Serial Bus - устройство для интерфейса пользователя) не будет работать над тем, что я планирую до сих пор, из-за потребностей пользователя.
Ответ 2
Из-за соображений безопасности вам будет очень сложно вводить события из вашего приложения в любое другое приложение.
Однако вам может быть повезло на родине, C/С++. Так что надеюсь, что ваш датчик-обертка окажется в виде .SO lib, который может быть включен в другие проекты...
Поскольку то, что вы пытаетесь сделать, похоже на то, что может сделать Espresso (это набор тестов JUnit, который может вставлять Motion/Touch/KeyEvents в представления)
Однако вы можете скомпилировать свой собственный образ с помощью некоторых добавленных приложений доступности, которые могут вам помочь. Но ваша идея действительно не будет применима к любому готовому Android-устройству.
Ответ 3
Ну, вы можете вставлять события во время тестирования, потому что Robolectric, espresso и все остальные запускают симуляции. Лучший способ сделать то же самое на реальном устройстве - это песочница для вашего приложения. Таким образом, ваше приложение будет действовать как ОС для других. Но это было бы дорогостоящим, и производительность не была бы хорошей.
Другая альтернатива - это то же самое, что и Xposed. Xposed перехватывает системные вызовы, позволяя модифицировать ОС без мигания чего-либо, поэтому, возможно, вы можете использовать тот же самый крючок (или сам Xposed), чтобы добавить свою функцию прослушивания. Для этого потребуется root, но звучит намного проще, чем изолировать каждое приложение в устройстве или создать пользовательский ром.
Ответ 4
Вы изучали возможности доступности Android для разработчиков? http://developer.android.com/guide/topics/ui/accessibility/services.html
Также имейте в виду, что вы можете использовать Android в качестве USB-хоста для внешних устройств, таких как домашние трекпады, джойстики и т.д. (возможно, с небольшим взломом).
http://developer.android.com/guide/topics/connectivity/usb/host.html
Что касается того, что уже доступно в ОС, ознакомьтесь с меню "Доступность" в настройках. Надеюсь, это поможет!