如何使用 AccessibilityService 查找元素

如何使用 AccessibilityService 查找元素

如果还不了解 AccessibilityService ,先看下这篇:如何使用 AccessibilityService 实现蚂蚁森林自动收取能量,无需Root,无需连接电脑

这里介绍的是用 AccessibilityService 查找元素,可以查找有

1.Id: 也就是我们在xml文件里定义的@+id/xx

2.Text: TextView,Button等View里面内容

3.ContentDescription: 一般View为了无障碍设置的描述,还有很多WebView里面的View显示文字也是用ContentDescription

4.ClassName: 就是View的Class名字,可以找ListView,ViewPager等不常见,一个View里只有一个的

这里我用的是一个叫 Auto.js 的工具来看一个View的元素,自己也一直想实现一个,实在懒,还没动工

Auto.js git地址

伸手党这里直接打包了一个debug包

首先看下 Id 是怎么找的吧,下面用的是支付宝里面的内容,蚂蚁森林这个View的所有属性

他的fullId就是相应的全部的 id 了,只要查找就能找到

下面是查找 Id 的源码,其实可以 AccessibilityNodeInfo 直接查找Id的方式查找

List<AccessibilityNodeInfo> list = root.findAccessibilityNodeInfosByViewId(mCheckData);
if (Utils.isEmptyArray(list)) {
    return null;
}
for (int i = 1; i < list.size(); i++) {//其他的均回收
    list.get(i).recycle();
}
return list.get(0);

上面的“蚂蚁森林”元素,其实也可以通过查找 Text 的方式找到

下面是查找 Text 的源码,也可以 AccessibilityNodeInfo 直接找Text的方式查找

List<AccessibilityNodeInfo> list = root.findAccessibilityNodeInfosByText(mCheckData);
if (Utils.isEmptyArray(list)) {
    return null;
}

AccessibilityNodeInfo returnInfo = null;
for (AccessibilityNodeInfo info : list) {
    if (mCheckData.equals(info.getText().toString())) {
        returnInfo = info;
    } else {
        info.recycle();
    }
}
return returnInfo;

再来看下 ContentDescription 是在哪里的吧

下面是查找 ContentDescription 的源码,通过递归的方式找ContentDescription

CharSequence text = thisInfo.getContentDescription();
return text != null && text.toString().equals(mCheckData);

下面是查找 WebText 和 ClassName 的源码,都是通过递归的方式找的

// WebText是
CharSequence text = thisInfo.getText();
return text != null && text.toString().equals(mCheckData);


// ClassName 查找
return thisInfo.getClassName().toString().equals(mCheckData);

最后附上完整demo的地址,里面封装了所有查找元素的方法,还根据自动领取蚂蚁森林举了个例子:蚂蚁森林自动领取能量

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值