美文网首页Android开发
AccessibilityService 获取View的Id

AccessibilityService 获取View的Id

作者: 芥末末的沫 | 来源:发表于2016-10-26 11:23 被阅读3239次

    之前写了一篇关于AccessibilityService的学习笔记,其中也遇到了关于Hierarchy View不能连接真机的问题

    一般会报Unable to get view server version from device XXXXX这个错误,而网上的搜索结果,大多都是从真正的问题原因来解决的这个问题,看了很多,总觉得很繁琐。

    报这个错的原因是因为连接Hierarchy View需要一个view server。而这个view server只有在工程机,或者调试机,以及模拟器上才能打开,在发布的市场版手机,也就是我们的通过正常渠道买到的手机是不能开启这个服务的。

    通过:adb shell service call window 3 这个命令可以查看我们的设备是否开启该服务。

    若返回值是:Result: Parcel(00000000 00000000 '........')说明View Server处于关闭状态

    若返回值是:Result: Parcel(00000000 00000001 '........')说明View Server处于开启状态

    下面介绍一种我认为比较笨的办法来获取active window中的view节点的Id:

    1、在启动AccessibilityService配置的时候,在配置(或xml)文件中添加一个flag

    android:accessibilityFlags="flagReportViewIds"

    或:info.flags = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;

    这个flag的作用主要是用于之后node.getViewIdResourceName()的权限。

    2、(笨办法)在window change的时候,遍历所有的node,打印出node对应的文字,和id。

    这样就相当于变相的绕过了真机连接Hierarchy View不成功的问题。在找到对应的view的时候,就可以将这些代码注释掉。这样就可以不管手机什么ENG模式,还是adb shell balabala....都可以愉快的找到想要操作的view的id啦。

    相关文章

      网友评论

        本文标题:AccessibilityService 获取View的Id

        本文链接:https://www.haomeiwen.com/subject/qjpduttx.html