博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于AccessibilityService点击无效解决方案
阅读量:6713 次
发布时间:2019-06-25

本文共 1999 字,大约阅读时间需要 6 分钟。

1.为什么会点击失效?

        例如微信的通讯录页面使用uiautomator捕获的界面属性,可以看到 clickable="false", 当前页面的ListView中item都是没有点击事件的. clickable=false的控件使用AccessibilityService点击都是无效的.

2.解决方案:

(1)配合ADB命令进行屏幕位置模拟点击(缺点是需要设备ROOT)

(2)使用AccessibilityService API7.0 中的dispatchGesture()的方法(只兼容Android7.0以上设备)

输出adb命令:

public void adbShell(String cmd) {    try {        // 申请获取root权限,这一步很重要,不然会没有作用        Process process = Runtime.getRuntime().exec("su");        // 获取输出流        OutputStream outputStream = process.getOutputStream();        DataOutputStream dataOutputStream = new DataOutputStream(                outputStream);        dataOutputStream.writeBytes(cmd);        dataOutputStream.flush();        dataOutputStream.close();        outputStream.close();        Log.d(TAG, "adbShell: 输出命令:" + cmd + "成功");    } catch (Throwable t) {        t.printStackTrace();        Log.d(TAG, "adbShell: 输出命令:" + cmd + "失败");    }}复制代码

AccessibilityService 根据id和text获取控件节点的坐标位置后调用adb坐标点击命令

public void adbClick(final String id, final String tv, int delay) {    handler.postDelayed(new Runnable() {        @Override        public void run() {            AccessibilityNodeInfo root = service.getRootInActiveWindow();            if (root == null) {                Log.d(TAG, "无Root:" + id);            }            List
tab = root.findAccessibilityNodeInfosByViewId(id); if (tab == null || tab.size() == 0) { Log.d(TAG, "找不到点击控件:" + id); return; } for (AccessibilityNodeInfo info : tab) { if (info.getText() != null && tv.equals(info.getText().toString())) { Rect rect = new Rect(); info.getBoundsInScreen(rect); Log.d(TAG, "adb点击位置: " + rect.top + "," + rect.bottom + "," + rect.left + "," + rect.right); adbShell("input tap " + rect.left + " " + rect.top); } else Log.d(TAG, "abd 找不到点击控件:" + id + "," + tv); } } }, delay);}复制代码

 

使用dispatchGesture() 

转载地址:http://morlo.baihongyu.com/

你可能感兴趣的文章
九、oracle 事务
查看>>
几种线性时间排序
查看>>
08 django模型系统(一)
查看>>
我对 前端 Js 开发方式 架构方向 的 一些看法
查看>>
Linux shell 自启动脚本写法
查看>>
How Many Tables HDOJ
查看>>
DataTable转换成List
查看>>
身份证号码验证算法
查看>>
py实现ftp
查看>>
3、异步编程-JS种事件队列的优先级
查看>>
关于C语言判断文件尾问题的探讨
查看>>
poj1243(经典dp)
查看>>
svn仓库转为git仓库
查看>>
跳转到指定的控制器
查看>>
cocoapod升级版本
查看>>
在正式800修改代码
查看>>
AngularJs的UI组件ui-Bootstrap分享(十三)——Progressbar
查看>>
用前序遍历递归构造二叉树
查看>>
JavaScript jQuery bootstrap css ajax
查看>>
组合选择器
查看>>