Служба специальных возможностей Android - выполнять действие при открытии определенного класса
Я работаю над приложением Accessibility Service, которое дает пользователям подсказки о том, что делать, когда они кажутся потерянными внутри приложения. Показывая им наложение экрана, объясняющее, что можно сделать на этом конкретном экране. Чтобы я точно знал, на каком экране они находятся, я реализовал AccessibilityService, который позволяет мне читать все. Теперь я хочу использовать эти данные, чтобы дать подсказки, которые я создал для определенных экранов.
Чтобы это работало, мне нужно вызвать метод, когда вызывается определенный класс. например:
TYPE_WINDOW_STATE_CHANGED специально для класса android.support.v4.widget.DrawerLayout из пакета com.google.android.apps.maps.
Вот как данные отображаются в моем журнале:
onAccessibilityEvent: [type] TYPE_WINDOW_CONTENT_CHANGED [class] android.support.v4.widget.DrawerLayout [package] com.google.android.apps.maps [time] 17716202 [text]
Все, что я мог найти, - Как нажать кнопку в настройках, используя AccessibilityService? где конкретная кнопка нажата с использованием findAccessibilityNodeInfosByViewId, но я не ищу ViewID и не хочу ничего нажимать, я хочу вызвать метод, когда на экране отображается нужный класс.
Это мой метод onAccessibilityEvent (здесь, я думаю, должно произойти волшебство):
public void onAccessibilityEvent(AccessibilityEvent event) {
AccessibilityNodeInfo source = null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
source = event.getSource();
Log.v(TAG, "Source Accessibility node info: " + source);
}
Log.v(TAG, String.format(
"onAccessibilityEvent: [type] %s [class] %s [package] %s [time] %s [text] %s",
getEventType(event), event.getClassName(), event.getPackageName(),
event.getEventTime(), getEventText(event))); }