我正在开发一个辅助功能服务应用,它可以为用户提供有关在应用内部丢失时应采取的措施的提示。向他们展示一个屏幕叠加层,解释可以在该特定屏幕上执行的操作。 为了让我确切地知道它们在哪个屏幕上,我实现了一个AccessibilityService,让我可以阅读所有内容。现在我想使用该数据来提供我为特定屏幕创建的提示。
为此,我需要在调用特定类时调用方法。例如:
来自 com.google.android.apps包的 TYPE_WINDOW_STATE_CHANGED 到具体类 android.support.v4.widget.DrawerLayout .maps
这是数据显示在我的日志中的方式:
onAccessibilityEvent: [type] TYPE_WINDOW_CONTENT_CHANGED [class] android.support.v4.widget.DrawerLayout [package] com.google.android.apps.maps [time] 17716202 [text]
所有我能找到的是How to click button in settings using 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))); }