为什么在尝试获取SMS窗口时getRootInActiveWindow()返回null

时间:2019-06-12 19:02:07

标签: android accessibility accessibilityservice

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

要查询包含SMS对话的所有UI元素(即TextViews,EditTexts等)的窗口,我在辅助功能服务的getRootInActiveWindow()方法内使用了onAccessibilityEvent(AccessibilityEvent event)。但是,每次触发SMS窗口中的AccessibilityEvent(程序包名称:com.google.android.apps.messaging)时,getRootInActiveWindow()都会返回 null

为什么会发生这种情况,如何解决这个问题?

感谢您的宝贵时间!

3 个答案:

答案 0 :(得分:1)

canRetrieveWindowContent中的SERVICE_META_DATA设置为true

Service Meta Data for Accessibility Service

答案 1 :(得分:0)

最好从事件源获取窗口。 getRootInActiveWindow()是从较早的时间开始的保留,并且有时会没有活动的窗口和/或该窗口未注册或没有正确响应。

答案 2 :(得分:0)

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

示例:

node.getRootInActiveWindow() = null;

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

希望这可以解决您的问题。