Android开发自动话操作Accessibilityservice和adb结合
来源:互联网 发布:pr防抖插件 mac 编辑:程序博客网 时间:2024/06/07 05:49
网上有很多有关于accessibilityservice的文章,也有adb命令的文章,但是结合起来的好像没有,最近项目有用到这两个技术的结合,就融合了一下,有不完善或者写得不对的地方请大家指出来,共同研究研究。
1、关于Accessibilityservice:
官方解释:
The classes in this package are used for development of accessibility service that provide alternative or augmented feedback to the user.
使用这个类可以开发用于给用户提供替换或者是增强反馈的辅助功能服务。An AccessibilityService runs in the background and receives callbacks by the system when AccessibilityEvents are fired. Such events denote some state transition in the user interface, for example, the focus has changed, a button has been clicked, etc. Such a service can optionally request the capability for querying the content of the active window. Development of an accessibility service requires extends this class and implements its abstract methods.
一个AccessibilityService在后台运行并接收系统AccessibilityEvents事件的回调,当用户界面的状态发生改变时会触发AccessibilityEvents事件,例如焦点的变化,点击一个按钮。这个服务可以获取到活动窗口的内容,开发一个辅助功能服务需要继承AccessibilityService并实现其中的抽象方法。An AccessibilityServiceInfo describes an AccessibilityServiceInfo. The system notifies an AccessibilityService for AccessibilityEvents according to the information encapsulated in this class.
一个AccessibilityService有一个用于描述AccessibilityService的AccessibilityServiceInfo对象,系统会通知AccessibilityService根据AccessibilityServiceInfo把信息装进AccessibilityEvents中。
具体操作看:http://blog.csdn.net/u011965040/article/details/53257005
写得很好,也很仔细
2、关于adb
adb是根于命令行执行相应的操作,前提是必须有Root权限,才能执行adb命令
模拟点击
execShellCmd("input tap 50 50"); //点击【50,50】那个点模拟滑动execShellCmd("input swipe 500 1000 500 600");模拟输入execShellCmd("input text '123132abc'"); //不支持中文,好像可以去下载相应的转码包好像可以,没试过模拟点击手机按键execShellCmd("input keyevent XX"); //后面的值有相应的按键,可到网上查,我就不贴出来了
/** * 执行shell命令 * * @param cmd */private void execShellCmd(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(); } catch (Throwable t) { t.printStackTrace(); }}
不管是Accessibilityservice还是adb都可以完成自动话操作,但是都有局限性,Accessibilityservice的点击还是滑动是根据空间的 id 或者是 text 来执行,如果有些控件是自定义控件,点击事件不是那么明显,你却想点击怎么办?adb需要坐标,需要去计算。
Accessibilityservice点击是去触发点击,adb是类似于touch事件,
当Accessibilityservice和adb结合起来就可以完美的解决上面的问题,因为Accessibilityservice可以锁定控件,得出控件信息,比如:id text 控件类型 坐标
/** * 得出控件信息---(text,id) * */private void recycle(AccessibilityNodeInfo info) { if (info.getChildCount() == 0) { //得出控件上的文字text Log.i(TAG, "---------------" + info.getText()); //得出控件上的id Log.i(TAG, "---------------"+ info.getWindowId()); //得出控件的坐标 Rect rect = new Rect(); info.getBoundsInScreen(rect); Log.i(TAG, "--------" + rect.left + "-----" + rect.top + "-----" + rect.right + "-----" + rect.bottom); } else { for (int i = 0; i < info.getChildCount(); i++) { if (info.getChild(i) != null) { recycle(info.getChild(i)); } } }}所有信息一目了然,
他是不支持点击的,可以获取坐标点,也是闭区间,可以完美执行点击
Rect rect = new Rect();node.getBoundsInScreen(rect);execShellCmd("input tap " + rect.left + " " + rect.top); //点
- Android开发自动话操作Accessibilityservice和adb结合
- 基于AccessibilityService和ADB shell实现自动操作
- android开发之AccessibilityService
- android 使用AccessibilityService 自动安装应用
- android 使用AccessibilityService 自动安装应用
- eclipse+adt下开发android微信红包自动抢(AccessibilityService类)
- adb和bat结合
- Android开发中AccessibilityService的使用
- Android开发中AccessibilityService的使用
- android-AccessibilityService
- Android AccessibilityService
- android AccessibilityService的学习和应用
- Android利用AccessibilityService实现自动装总结(一)
- Android利用AccessibilityService实现自动装总结(二)
- Android AccessibilityService实现微信自动抢红包
- Android通过AccessibilityService实现微信自动回复功能
- Android通过AccessibilityService实现微信自动回复功能
- Android微信/QQ红包自动抢(AccessibilityService)
- [第六章]实作嵌入式系统平台 part1
- spring-mvc拦截器和<mvc:annotation-driven />的详解
- 动态规划
- Java 类——成员方法
- 斯坦福CS231n 2017最新课程:李飞飞详解深度学习的框架实现与对比
- Android开发自动话操作Accessibilityservice和adb结合
- 欢迎使用CSDN-markdown编辑器
- TensorFlow + Docker + PyCharm
- scp
- PCB新手养成日记
- 集合类Map ConcurrentHashMap Collections.synchronizedMap()
- 如何利用Open Live Writer发布CSDN博客
- ExceptionUtil
- Python3 BeautifulSoup pymysql