Android сервис доступности получает разные события при использовании другого идентификатора приложения - PullRequest
0 голосов
/ 14 января 2020

У меня есть простая служба специальных возможностей, которая показывает имя класса представления, которое вызвало событие доступности:

class TestService : AccessibilityService() {
    override fun onInterrupt() {
        //Do nothing
    }

    override fun onAccessibilityEvent(event: AccessibilityEvent?) {
        val source = event?.source?.className.toString()
        println(source)
        Toast.makeText(this, source, Toast.LENGTH_SHORT).show()
    }
}

и XML

<accessibility-service 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:accessibilityEventTypes="typeViewFocused"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:canRetrieveWindowContent="true"
    android:accessibilityFlags="flagDefault" />

Все работает нормально, но Я заметил, что если есть и другая активированная служба доступности (Dashlane, LastPass или 1Password), сервис показывает разные результаты.

Я использую браузер Samsung inte rnet (https://play.google.com/store/apps/details?id=com.sec.android.app.sbrowser&hl=en) для запуска событий специальных возможностей, щелкая поля ввода текста. Хотя включена только моя служба доступности, я получаю, что источником события является FrameLayout, который представляет весь веб-контент в браузере. Однако, если включена одна из ранее упомянутых служб, я получаю, что источником события был EditText, который является точным представлением, на которое я нажал. Позже я хотел бы, чтобы мой сервис работал, без необходимости включения других сервисов.

Сервисы специальных возможностей раньше могли запрашивать javascript средство чтения с экрана для внедрения в Интернет. содержимого, указав android:canRequestEnhancedWebAccessibility="true" и добавив flagRequestEnhancedWebAccessibility в xml, но эта функциональность устарела начиная с API 26 (https://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo#CAPABILITY_CAN_REQUEST_ENHANCED_WEB_ACCESSIBILITY). Тем не менее, я попытался добавить их, но безуспешно.

После того, как несколько дней врезался головой в стену, я попытался установить свое приложение, используя идентификатор приложения LastPass com.lastpass.lpandroid. И к моему удивлению - это сработало. Мой сервис получал события с правильными источниками, указанными в них. Обратите внимание, что никакая другая служба специальных возможностей не была включена, а также не было добавлено android:canRequestEnhancedWebAccessibility="true" к xml службы. Я пытался сделать то же самое с другими идентификаторами приложений, и это работало с com.dashlane и com.agilebits.onepassword тоже. Как только я установил свой сервис с другим идентификатором приложения, он перестал работать.

Итак, мой вопрос: существует ли какой-то белый список идентификаторов приложений в android, который позволяет javascript внедрять в веб-контент если в этом приложении включена служба специальных возможностей? Или это поведение может быть как-то связано с https://github.com/openid/OpenYOLO-Android проектом? Или это какой-то другой функционал, о котором я не знаю?

Вы можете воспроизвести его, используя https://github.com/arnas91/accessibility-service-test

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...