QueryController主要是给UiSelector提供服务的类,将条件传入系统去查询AccessibilityNodeInfo信息。包访问权限,不提供给用户调用
在UiDevice里有同名方法,如有不明白可回UiDevice学习笔记(1)查看
调用translateCompoundSelector方法的接口,先得到根节点,然后将根节点,选择器,布尔值传入。主要作用参见translateCompoundSelector。boolean值默认为false.
以传入的nodeinfo为基准,递归遍历其所有的子节点,直到找到符合UiSelector条件的对象并返回。
同上,只是少了一个subSelector判断条件
Log辅助类,格式化日志输出
在前面AccessibilityService中提到过getRootInActiveWindow()方法。实际上该方法就去去调用getRootNodeInActiveWindow()。
顾名思义,包名/activity名
得到条件的数目
得到根节点
初始化4个变量,因为Selector是多种组合的,出错时,你无法判断是哪一个条件出错,通过下面4个变量,可以给每个条件标上索引,这样错处就会以索引标识。
private void initializeNewSearch() { mPatternCounter = 0;//匹配数量 mPatternIndexer = 0;//匹配索引 mLogIndent = 0;//Log索引 mLogParentIndent = 0;;//父log索引 }
UiSelector包含3中格式的selector,如下所示:
regular_selector = By[attributes... CHILD=By[attributes... CHILD=By[....]]] pattern_selector = ...CONTAINER=By[..] PATTERN=By[instance=x PATTERN=[regular_selector] compound_selector = [regular_selector [pattern_selector]]
所以要要想通过UiSelector获得对象,得分3中方法分别处理对应的字符串组合,然后再通过findNodePatternRecursive方法获得所需的子节点。
uiautomator中QueryControlller学习笔记(9),布布扣,bubuko.com
uiautomator中QueryControlller学习笔记(9)
原文:http://blog.csdn.net/itfootball/article/details/24176535