我正在开发一个应用程序,它可以将屏幕上的文本读取给用户。当用户进入SMS对话时,我想从上到下依次阅读消息。
要查询包含SMS对话的所有UI元素(即TextViews,EditTexts等)的窗口,我在辅助功能服务的getRootInActiveWindow()
方法内使用了onAccessibilityEvent(AccessibilityEvent event)
。但是,每次触发SMS窗口中的AccessibilityEvent
(程序包名称:com.google.android.apps.messaging
)时,getRootInActiveWindow()
都会返回 null 。
为什么会发生这种情况,如何解决这个问题?
感谢您的宝贵时间!
答案 0 :(得分:1)
将canRetrieveWindowContent
中的SERVICE_META_DATA
设置为true
。
答案 1 :(得分:0)
最好从事件源获取窗口。 getRootInActiveWindow()是从较早的时间开始的保留,并且有时会没有活动的窗口和/或该窗口未注册或没有正确响应。
答案 2 :(得分:0)
如果您将getRootInActiveWindow()
设置为null,则尝试将节点获取到该特定节点内,然后再查询该特定节点上的getRootInActiveWindow()
。
示例:
node.getRootInActiveWindow() = null;
然后尝试node.get(0).getRootInActiveWindow()
或node.get(1).getRootInActiveWindow()
希望这可以解决您的问题。