Перехватить все сенсорные данные (включая клавиатуру) - PullRequest
0 голосов
/ 11 февраля 2019

В настоящее время я изучаю способы получения данных с сенсорного экрана в Android.

Прежде чем продолжить, приложение будет использоваться в исследовательских целях и будет использовать все сенсорные входы для эксперимента.,Приложение не предназначено для публичного выпуска.Пользователи будут знать, что все их входы контролируются.

Я в основном хочу контролировать все сенсорные входы на экране телефона, включая нажатия клавиш и т. Д. Мне удалось получить общие сенсорные события:

public override bool OnTouchEvent(MotionEvent e)
{
    int x = (int)e.GetX();
    int y = (int)e.GetY();

    System.Diagnostics.Debug.WriteLine($"Touch detected at x:{x} y:{y}");

    return base.OnTouchEvent(e);
}

Но этот метод не будет вызываться для следующих ситуаций:

  1. Другой элемент в представлении касается (не самого представления, то есть кнопки).
  2. Представлена ​​клавиатура

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

Возможно ли это с клавиатурой по умолчанию?Я, скорее всего, буду использовать Xamarin Android для реализации этого проекта (так как у меня больше опыта работы с Xamarin, чем с Android).Я бы предпочел остаться как можно более ванильным.

Спасибо

Screenshot of the touch events I want to intercept

1 Ответ

0 голосов
/ 13 февраля 2019

Я смог «составить» решение, которое идеально подходит для моих нужд.Решение не является идеальным и требует, чтобы устройство Android было подключено к компьютеру, и необходимо запустить серию сценариев.

Воспроизведение записи с Android Touch Record при условии, что все шаги, необходимые дляИзвлеките данные касания устройства в файл CSV.

Чтобы получить данные о событиях касания, вы должны сделать следующее:

  • Запустить сценарий оболочки ./find_touchscreen_name.sh Если это работает, игнорироватьследующий шаг
  • Запустите команду adb shell getevent -lp (вам может потребоваться заменить shell на exec-out
  • Определить, какое устройство является вашим сенсорным экраном, запустив adb shell getevent | grep event<your_index> для каждогоИндекс, который содержит метку ABS_MT_TOUCH_MAJOR и отслеживает вывод.
  • Когда у вас есть сенсорный экран, вызовите скрипт python: human_readable_data.py со следующими аргументами:

Использование: python human_readable_data.py arg1 arg2

| Argument | Value               | Example                             |
| -------- | ------------------- | ----------------------------------- |
| arg1     | touchscreen device  | /dev/input/event7                   |
| arg2     | csv output location | /Users/$user/Desktop/touch_info.csv |
  • Запишите касания сенсорного экрана
  • Закройте скрипт Python (Ctrl + C)
  • Откройте CSV вывода

Теперь мы записали наш сенсорный экран Androidta для дальнейшего анализа.

Это решение НЕ требует корневого устройства!

...