У меня есть Android AccessibilityService
, развернутый на Samsung Note 4 под управлением Android 5.0.1.
Я использую WhatsApp в качестве испытательного стенда, но это относится к любому приложению и больше касается того, как служба специальных возможностей запускает события.
Событие 2048 (TYPE_WINDOW_CONTENT_CHANGED)
не всегда вызывается Android. Если я отправляю сообщения в свой WhatsApp, когда он находится в фокусе, а экран включен в 75% случаев, это событие запускается, а иногда просто не запускается.
Есть причина для этого? Являются ли события доступности независимыми?
Кроме того, похоже, что событие 4096 (TYPE_VIEW_SCROLLED)
запускается постоянно, когда пользователь прокручивает или когда в окне чата WhatsApp появляется новая корреспонденция, однако, похоже, нет возможности определить, какова текущая позиция прокрутки устройства? AccessibilityEvent.getSource()
предоставляет доступ к некоторым метаданным для списка (в данном случае android:id/list), однако отсутствует информация о позиции прокрутки этого списка или его дочерних элементов. Дочерний список зависит от того, что отображается на экране, а значения boundsToScreen/Parent
одинаковы независимо от того, смотрите ли вы в конец списка, в середину или вверх. Есть ли какие-нибудь подсказки, которые помогут мне определить положение прокрутки из экземпляра AccessibilityEventNodeInfo
, который мне представлен?
Наконец, когда событие 2048 (TYPE_WINDOW_CONTENT_CHANGED)
действительно срабатывает, бывают случаи, когда новые элементы фактически недоступны из AccessibiltyEvent.getSource()
(даже если вы выполняете итерацию до корневого элемента через цикл while, используя getParent()
, а затем снова сканируете вниз). Похоже, что событие делает снимок экрана до того, как изменение было применено к пользовательскому интерфейсу. thread.sleep
не помогает - похоже, что AccessibilityEventNodeInfo
- это скорее снимок, чем прямой доступ к пользовательскому интерфейсу? Как-нибудь обойти это?