Можно ли имитировать тач без рута?

Есть ли способ имитировать касание (в любом месте) экрана без рута?

Если нет, есть ли другой способ выполнить картонное действие «выбрать» без магнитной поддержки или каждый раз открывать картон ?

Задний план

Я пытаюсь заставить картонные приложения работать с телефоном 5.1, который не поддерживает магнитную «кнопку».

Кажется, что большинство приложений используют кнопку для выбора или продвижения вперед, поэтому без ее работы ее сложно использовать. Я обнаружил, что прикосновение в любом месте экрана также работает как выбор, поэтому в данный момент я открываю заднюю часть, касаюсь экрана, а затем снова закрываю его, но очевидно, что это быстро становится утомительным.

Что я пробовал:

Для отправки сенсорных событий требуются корневые/системные разрешения, поэтому, как и для любого другого картона, вам нужно иметь настоящий магнит, чтобы экран мог его обнаружить в качестве входа. Использование мыши (Bluetooth или USB) может быть полезным.
Вы можете использовать OTG-кабель и мышь при условии, что OTG поддерживается вашим устройством.
Тогда скажите мне, ребята, как teamviewer это делает? Доступна версия teamviewer, которая позволяет удаленно управлять Android-устройством так же, как это делается с ПК. Так как ТВ имитирует события???
вы можете добиться этого, используя плагин Tasker и TouchTask без рута. Tasker — очень мощное приложение для Android, которое необходимо иметь, если вы действительно хотите автоматизировать свой телефон. Это платное приложение, но потраченные деньги того стоят.

Ответы (3)

Вы можете потенциально имитировать прикосновение с помощью команды input tap x y(например, из эмулятора терминала или, возможно , с помощью Tasker (не могу вспомнить, может ли он выполнять команды оболочки, но я предполагаю, что да)) или через ADB с помощью adb shell input tap x y. См. https://stackoverflow.com/a/20830258/2141741 (и если вы хотите подключить устройство к себе через ADB, https://code.google.com/p/android/issues/detail?id=48126 и соответствующие комментарии являются информативными).

Это решение не требует рута (по крайней мере, не делает этого с компьютера, подключенного через ADB).

Это был самый простой способ, который я нашел. Помещение команды в цикл, ожидающий нажатия клавиши, прекрасно справляется с задачей: $ while true; do read; adb shell input tap 0 0; echo pressed; done. Хотя у него большое отставание.

Я попробовал то, что предложил @user43185 , но это не сработает. Но в качестве альтернативы я вижу, что можно использовать следующее.

input [text|keyevent]
input text <string>
input keyevent <event_code>
input motionevent <x> <y> <down|move|up>
input motionevent-batch <pointer-log>

Например, если мне нужно событие касания, я делаю:

adb shell input motionevent x y down
adb shell input motionevent x y up

Где x и y — координаты на устройстве.


ОБНОВИТЬ.

Согласно этому ответу , причина, по которой другой ответ не будет работать, связана с версией Android на устройстве.

Я думаю, это зависит от версии ADB. Кроме тех вижу tap, swipe, pressи rollна ADB версии 1.0.36.
Я провел исследование, видимо, это из-за версии Android, установленной на устройстве.

Я сделал это на Android 6.0 с помощью приложения Automate . Скачать Automate Flow можно здесь . Каждый раз, когда вы нажимаете кнопку гарнитуры, она запускает команду оболочки «input tap 200 200».

это работало только в автоматическом приложении для меня (android 9), но автоматизация теперь имеет действие «взаимодействовать с касанием», которое работает глобально. а затем мне пришлось изменить триггер на «крюк гарнитуры с нажатой клавишей», потому что другой работал только тогда, когда в приложении не было звука...