Now You Can Customize Your Android Accessibility Service For KeyPress Event
Accessibility services are a feature of the Android framework designed to provide alternative navigation feedback to the user on behalf of applications installed on Android devices.
It runs in the background and receives callbacks from the system when accessibility event is fired. Of course when accessibility is enabled on the device.
Examples of common accessibility services
- Voice Assistance.
- Switch-Access: Allows Android users with mobility limitations to interact with devices using one or more switches.
- Talkback: A screen reader commonly used by visually impaired or blind users.
Sometimes there are unique requirements. For instance, let’s say, on pressing “Caps Lock” instead of relying on the talkback (that speaks out, “Caps Lock On” & “Caps Lock Off”) we want to play an audio file instead. This is more relevant when the user does not know “English” & hence the default talkback, which is in English is not going to work. The solution is to use an audio file in the localized language.
Creating an accessibility service
We can build our own accessibility service as per application requirements to make it more accessible.
Let’s take an example of Typing Tutor app, where we may need to override hardware keyboard event using accessibility service.
In this example, we are going to override the windows key press event, to start your app’s home menu, instead of device start menu (By default on android it opens Google assistant).
Steps
- To Register your accessibility service, create a service class which receives accessibility events
- Like any other service, you also have to register it in the manifest file. Remember to specify that it handles the android.accessibility intent, so that the service is called when applications fire an AccessibilityEvent.
Configuration Service
An accessibility service can be configured to receive specific types of accessibility events, In our case, it should be keyboardEvent.
We can also add a filter like it can listen only to the specific app (package name), specific time duration, can work only with particular activity etc.
there are two ways to configure service event settings:
- Via meta-data entry in the manifest file.
- Programmatically, by calling setServiceInfo(AccessibilityServiceInfo)
Example for XML configuration:
Here I used android:canRequestFilterKeyEvents=”true” & android:accessibilityFlag=”flagRequestFilterKeyEvents” to get key events from the system. Also, have to override the onKeyEvent() method inside our service class
That’s it. We are done with the service configuration. Don’t forget to add the below permission in your manifest file.
Now to get this event to our Activity class, we are going to user local broadcast manager. It’s an android component which allows you to send or receive Android system or application events.
Then register that local broadcast on your activity class. By this activity will get notified whenever an event occurs. Now you can write your own action on it.
Android Accessibility Autoclick
Accompanies some interesting features of Android ’ s accessibility services, such as micro-mail auto-robbery bags, application of one-key installation of treasures, etc. The general principle is to listen to changes in cellular forms, get the corresponding View, click on them, press them, etc. Touch, and then we use the service Access Service, which is the service ’ s service.
Effect

I create Myaccessibility Service
#1 On Accessibility Service, rewrite on AccessencyEvent
on AccessbilityEvent is the most important method, and all interface operating events are referred back to this method, not only for the current application, but also for listening to other applications on the mobile phone. For example, when the interface changes, we print information about AccessencyEvent, and we can see basic package information, class names, etc.

#2 #, registration services
#3 #, service configuration #accessibilityconfig.xml
II. Realising the clicks
#1, coordinates click: we can open the pointer position of the phone and see the coordinates of the button
Автоматизируем работу с программами на Android при помощи Accessibility Service

Еще в XIX веке Гегель сказал: «Машиноподобный труд нужно отдать машинам». И тут с одним из творцов немецкой классической философии трудно поспорить: вряд ли Георг Вильгельм Фридрих отказался бы от автоматизации таких действий, как отключение звука и нажатие кнопки «Пропустить рекламу» при просмотре ролика в YouTube или получение ежедневных бонусов за посещение приложения. Тем более что для всего этого у нас уже есть готовый инструментарий!
Как мы говорили в предыдущей статье, Accessibility Service может получать события, происходящие на экране, но он же может и вызывать их. Например, находить нужные элементы в приложении и кликать по ним.
Ставить чужое приложение с подобной функциональностью опасно — все мы знаем репутацию Google Play и примерно представляем себе, что такое приложение может сделать с твоим банковским клиентом на телефоне. Поэтому выхода два: либо декомпилировать чужое ПО и смотреть, куда именно оно нажимает, либо пилить свое, строго под поставленные задачи.
Для исследовательских целей я создал приложение, которое будет само в себя кликать из собственного сервиса :).
Подготовка к работе сервиса
Чтобы наш сервис начал работу, ему нужно предоставить права в специальном разделе настроек. Как перенаправить туда пользователя, ты уже знаешь из первой статьи. Дополнительно мы сами можем перепроверить, есть ли эти права у приложения.
Здесь accessibilityservice_id — это строка вида «имя пакета/.сервис», у нас это ru.androidtools.selfclicker/.ClickService.
Вот описание сервиса из манифеста:
Параметр label отвечает за название приложения в настройках сервиса спецвозможностей. В разделе meta-data задается указание на описание нужных функций для работы сервиса. Вот файл serviceconfig:
В нем мы описываем полномочия сервиса, типы событий, которые он может обрабатывать, и активити, которое запустится для настройки работы сервиса.
Полное описание этих параметров, как всегда, есть в документации.

checkAccess() вернул false!
Рекомендуем почитать: 
Xakep #292. Flipper Zero
Жизненным циклом сервиса управляет система. Сами остановить сервис мы не можем. ОС самостоятельно выгрузит ненужные сервисы — к примеру, зачем крутить сервис для приложения, которое не запущено?
Мы можем привязать сервис к строго нужному приложению. Как только мы дали разрешение на работу, у сервиса вызовется метод onServiceConnected. У него мы должны вызвать метод setServiceInfo() с параметром AccessibilityServiceInfo. За фильтрацию приложений, с которыми работает сервис, отвечает строковый массив packageNames.

Да, он точно будет
Работаем с событиями AccessibilityEvent
После раздачи всех разрешений нам надо запустить нужное приложение. Если мы знаем его имя пакета, сделать это несложно:
Для запуска приложения с чистого листа используем флаг Intent.FLAG_ACTIVITY_CLEAR_TOP. В противном случае приложение может вернуться на экран со старым состоянием, очень далеким от стартового экрана.
Теперь нужно обрабатывать события в методе onAccessibilityEvent. У события есть тип, он поможет определить, что произошло (например, сменилось окно, кликнули по элементу, элемент получил фокус). Чтобы получить источник события AccessibilityNodeInfo, надо у объекта события вызвать метод getSource().
Источник имеет много полезных свойств, помогающих в работе: текст, ID, имя класса. У него могут быть родительский и дочерние элементы.
Он может быть кликабельным isClickable(), и, чтобы щелкнуть по нему, как нормальный пользователь, нужно вызвать метод performAction(AccessibilityNodeInfo.ACTION_CLICK).
Если мы хотим более глобальных действий, например нажать клавишу «Назад» на устройстве, то следует вызвать метод performGlobalAction() с нужным параметром.
Чтобы найти на экране требующуюся AccessibilityNodeInfo, мы можем вызвать один из методов: поиск по ID (findAccessibilityNodeInfosByViewId) и поиск по тексту (findAccessibilityNodeInfosByText). Будь готов к тому, что он вернет нам массив элементов или вообще ни одного.
Потренируемся на кошках, точнее — на окошках
Вот разметка нашего подопытного экрана:
У некоторых элементов есть ID и текст, у других только текст, некоторые некликабельны.
Иногда обработчики кликов устанавливают на области, превышающие своими размерами элемент с текстом или картинкой.
Поизучаем эту задачу с помощью метода debugClick.
Вот что вышло в лог:
Чтобы воспроизвести последовательность кликов, нужно сначала изучить элементы, которые будут нажиматься. Но иногда также важна и последовательность их нажатий.
Для нажатий на первые две кнопки можно использовать findAccessibilityNodeInfosByText и findAccessibilityNodeInfosByViewId. Если текст у элементов повторяется, дополнительно можно проверять на ClassName или родителя.
Чтобы кликнуть в наш LinearLayout, нужно получить его AccessibilityNodeInfo, ID у него нет, но есть дочерние элементы TextView и Button, у которых есть текст.
Для начала нам нужно получить один из них, а потом кликнуть в его родителя.
Бывают и обратные ситуации, когда есть родитель, а кликаем мы в дочерние. Для этого используй nodeInfo.getChildCount() и обращайся к элементу в цикле по ID nodeInfo.getChild(id) (если не ошибаюсь, нумерация ID идет с нуля).
Начинать работу сервиса лучше с события смены окна:
Если весь алгоритм действий уже готов, то можно запускать сервис автоматически через AlarmManager, например раз в сутки.
Отменить запуск можно вот так:
Заключение
Класс AccessibilityService позволит избавиться от рутинных операций на твоем Android-устройстве. Его возможностей достаточно, чтобы реализовать почти любую задачу, главное — дать разрешения и найти кликабельный элемент на экране.
Что это за программа Android Accessibility Suite и как ее включить
Разработчики операционной системы Андроид предустанавливают на мобильные устройства огромное количество сервисов и приложений, упрощающих взаимодействие с гаджетом. В частности, на всех смартфонах есть Android Accessibility Suite, однако не все знают, что это и для чего используется. Сегодня предлагаем разобраться в особенностях данного ПО и способах его применения на практике.
Что это такое
Android Accessibility Suite – это программа, название которой можно перевести как «Набор специальных возможностей Андроид». AAS является встроенным набором многофункциональных инструментов, включая:
- TalkBack;
- Switch Access;
- функции слуха и другие.
Более подробно о каждом из доступных инструментов в рамках Android Accessibility Suite мы поговорим чуть позже, а пока предлагаем разобраться, для чего используется этот набор функций, и как он активируется.
Для каких целей используется
Пакет программного обеспечения AAS предназначен для людей с различными нарушениями здоровья. Так, если у вас плохое зрение, и вы не можете в полном объеме пользоваться смартфоном, можно активировать TalkBack, чтобы каждое ваше действие озвучивалось голосовым ассистентом. Так вы будете понимать, на какие кнопки нажимаете, и какие приложения запускаете.
Также к числу возможностей AAS относятся функции, предназначенные для людей с нарушениями слуха. В таком случае вам поможет точечная настройка звукового баланса, если одно ухо слышит хуже другого. Наконец, в рамках специальных возможностей Android скрывается функция удаленного управления смартфоном при помощи клавиатуры. Впрочем, все это требует дополнительных объяснений, которые будут даны далее.

Как включить
Поскольку Android Accessibility Suite является не одной программой, а целым пакетом, объединяющим несколько сервисов, активация каждого приложения осуществляется по отдельности. Однако это не помешает вам включить ту или иную возможность, действуя по следующей инструкции:
- Откройте настройки смартфона.

- Перейдите в раздел «Расширенные настройки», а затем – «Специальные возможности».

- Откройте интересующую вкладку («Основные», «Зрение», «Слух», «Физические») и активируйте необходимую функцию.
Обратите внимание, что названия некоторых пунктов меню в настройках вашего телефона могут отличаться в зависимости от производителя устройства. Поэтому при желании используйте поисковую строку, чтобы в конечном итоге найти раздел «Спец. возможности».
Это лишь основные сервисы, доступные в рамках пакета AAS, так что не поленитесь изучить дополнительные сценарии использования программного обеспечения.
Что делать, если нет программы
Если вы попытаетесь активировать специальные возможности через приложение Android Accessibility Suite, то заметите, что программы нет ни на рабочем столе, ни в разделе настроек «Приложения». Это стандартная ситуация, поскольку программное обеспечение направлено на узкий круг пользователей. Рядовому владельцу смартфона они не нужны, в связи с чем специальные возможности прячутся в одноименном меню настроек устройства.

Возможности программы
Как уже говорилось ранее, пакет AAS состоит из нескольких сервисов. Основными являются TalkBakc, Switch Access и озвучивание при нажатии. Далее подробнее поговорим о каждой опции, которую вы можете активировать в меню специальных возможностей.
TalkBack
Эта опция предназначена для людей с нарушениями зрения, которые практически не видят, что изображено на экране. Если вы активируете TalkBack service во вкладке «Зрение» специальных возможностей настроек, то смартфон начнет озвучивать каждое ваше нажатие.
Таким образом, если вы тапните по иконке интересующего приложения, то голосовой ассистент сначала озвучит его название, а для запуска понадобится тапнуть второй раз. То же самое касается всех элементов внутри установленных программ.

Switch Access
Это совершенно иной сервис, который находится во вкладке «Физические». Говоря простым языком, Switch Access представляет собой внешний пульт управления. Активировав данную опцию, вы сможете управлять смартфоном через клавиатуру или другое периферийное устройство. Вместе с тем экран перестанет быть сенсорным.

Озвучивание при нажатии
Наконец, в рамках AAS представлена опция озвучивания при нажатии, находящаяся во вкладке «Зрение». Ее нередко путают с функцией TalkBack, потому что она также предназначена для озвучивания элементов смартфона. Но, если TalkBack озвучивает элементы на экране, то вторая опция – только текст.
Таким образом, после активации озвучивания при нажатии голосовой ассистент будет переводить в разговорную речь любой текст, представленный на экране. Это может быть статья в интернете, целая книга или сообщение из мессенджера. Вместе с тем названия приложений и их компонентов озвучиваться не будут.