Как запрограммировать событие 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

Что касается того, что уже доступно в ОС, ознакомьтесь с меню "Доступность" в настройках. Надеюсь, это поможет!