为什么在尝试获取 SMS window 时 getRootInActiveWindow() return 为空

Why does getRootInActiveWindow() return null when trying to get the SMS window

我正在开发一个应用程序,它可以向用户读取屏幕上的文本。当用户进入 SMS 对话时,我想按顺序从上到下阅读消息。

要查询包含 SMS 对话的所有 UI 元素(即 TextViews、EditTexts 等)的 window,我在 onAccessibilityEvent(AccessibilityEvent event) 我的无障碍服务的方法。但是,每次从 SMS window(包名称:com.google.android.apps.messaging)触发 AccessibilityEvent 时,getRootInActiveWindow() returns null.

为什么会出现这种情况,我该如何解决这个问题?

感谢您抽出宝贵时间!

您最好从事件源中获取 window。 getRootInActiveWindow() 是早期的遗留问题,有时没有活动的 window and/or window 未注册或未正确响应。

如果您将 getRootInActiveWindow() 设为 null,则尝试获取该特定节点内的节点,然后您可以在该特定节点上查询 getRootInActiveWindow()

示例:

node.getRootInActiveWindow() = null;

然后尝试,node.get(0).getRootInActiveWindow()node.get(1).getRootInActiveWindow()

希望这能解决您的问题。

SERVICE_META_DATA 中的 canRetrieveWindowContent 设置为 true

Service Meta Data for Accessibility Service