Получите TYPE_TOUCH и TYPE_GESTURE в AccessibilityService - PullRequest
0 голосов
/ 02 июня 2018

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

Я испробовал все предложенные в ответах подходы, начиная с наложения приложения с флагом WATCH_OUTSIDE_TOUCH и без него.Подход getevent также не подходит для меня, так как требует корневого или внешнего хранилища (как говорится в ответе).

Итак, я создал AccessibilityService и теперь я могу обнаруживать такие события как: VIEW_CLICKED, VIEW_SCROLLED.Однако в документации я встречал также GESTURE_DETECTION_START, GESTURE_DETECTION_END, TOUCH_INTERACTION_START и TOUCH_INTERACTION_END.Я хотел бы использовать их для измерения времени взаимодействия.К сожалению, мой сервис вообще не получает эти события, несмотря на правильную (?) Конфигурацию.Моя текущая конфигурация выглядит так:

AndroidManifest.xml :

...
<service
    android:name=".accessibility.MyAccessibilityService"
    android:label="@string/accessibility_service_label"
    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
    <intent-filter>
        <action android:name="android.accessibilityservice.AccessibilityService" />
    </intent-filter>
    <meta-data
        android:name="android.accessibilityervice"
        android:resource="@xml/accessibility_config" />
</service>
...

accessibility_config.xml :

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackAllMask"
    android:description="@string/accessibility_service_description"
    android:notificationTimeout="5"
    android:summary="@string/accessibility_service_description" />

Подводя итог, мой сервис запускается и извлекает некоторые события должным образом, но в нем отсутствуют жесты и сенсорные события начала / окончания.Я пробовал много других конфигураций, включая все возможности и флаги, но без какого-либо эффекта.Также я попытался переопределить метод AccessibilityService::onGesture, но он никогда не вызывался.Доступны ли эти события только в режиме сенсорного исследования?

Я описал свою проблему, может быть, немного шире, но я был бы признателен за любую помощь или предложения, даже не связанные строго с подходом AccessibilityService.

1 Ответ

0 голосов
/ 05 июня 2018

После некоторой борьбы я выяснил, в чем проблема (или множество проблем):

  • Мой accessibility_config.xml файл был недействительным, поскольку он содержал тег <?xml version="1.0" encoding="utf-8"?>, и, согласно docs

Эти метаданные должны ссылаться на ресурс XML, содержащий тег

Поэтому я решил, что это необходимо итолько этот тег для правильной работы.

  • GESTURE_DETECTION_START, GESTURE_DETECTION_END, TOUCH_INTERACTION_START и TOUCH_INTERACTION_END - события, доступные только в режиме сенсорного исследования.

Так что android:canRequestTouchExplorationMode="true" и android:accessibilityFlags="flagRequestTouchExplorationMode" отсутствовали в моей конфигурации. документы включают эти события в Типы исследования .

...