没有合适的资源?快使用搜索试试~ 我知道了~
工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击。 经过一番探索,一共整理出两种不同的方案:AccessibilityService 和 adb shell命令,读者可自行选择合适的场景。 AccessibilityService 无障碍模式是我首先想到的方案,对于不知道Android无障碍模式的,可自行百度。这里简单说明一下,AccessibilityService是Android为残障人士提供的贴心功能,比如可以报出当前页面有哪些按钮balabala。使用官方提供的一些列API,我们还可以完成一些自动运行的“黑科技”操
资源详情
资源评论
资源推荐
Android后台模拟点击探索(附源码)后台模拟点击探索(附源码)
工作中我们需要自制一套工具,其中遇到需要模拟点击事件的需求,类似按键精灵的功能,支持后台持续运行,满足触发条件时完成点击。
经过一番探索,一共整理出两种不同的方案:AccessibilityService 和 adb shell命令,读者可自行选择合适的场景。
AccessibilityService
无障碍模式是我首先想到的方案,对于不知道Android无障碍模式的,可自行百度。这里简单说明一下,AccessibilityService是Android为残障人士提
供的贴心功能,比如可以报出当前页面有哪些按钮balabala。使用官方提供的一些列API,我们还可以完成一些自动运行的“黑科技”操作,比如早些
年的红包插件、微信自动回复插件、自动点赞插件等。
本方案原理比较简单:扫描当前页面的View树,找到目标控件,模拟点击操作,下面详细阐述。
添加配置文件添加配置文件
首先需要在res目录下建立配置文件:accessible_service_config.xml ,名字随意取。
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagReportViewIds"
android:canRetrieveWindowContent="true"
android:notificationTimeout="100"
android:description="@string/description"
android:packageNames="目标包名"/>
accessibilityEventTypes:设置响应事件的类型,这里设置typeAllMask,就是响应全部类型的事件。
accessibilityFeedbackType:设置回馈给用户的方式,有语音播出和振动,这里使用通用类型。
notificationTimeout:设置响应时间。
packageNames:目标包名,比如红包插件就要设置微信包名,关于包名如何获取,下文会提到。
继承继承AccessibilityService编码编码
接着我们继承AccessibilityService新建AutoClickAccessibilityService,重写onAccessibilityEvent(AccessibilityEvent event)。
public class AutoClickAccessibilityService extends AccessibilityService {
private static final String TAG = "GK";
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
ztLog("===start===");
try {
//拿到根节点
AccessibilityNodeInfo rootInfo = getRootInActiveWindow();
if (rootInfo == null) {
return;
//开始遍历,这里拎出来细讲,直接往下看正文
if (rootInfo.getChildCount() != 0) {
……
}
} catch (Exception e) {
ztLog("Exception:" + e.getMessage(), true);
}
}
拿到根节点以后,我们有两种方式开始寻找目标节点:
根据View id:findAccessibilityNodeInfosByViewId
根据控件文案:findAccessibilityNodeInfosByText
这里我们拿魅族手机自带的音乐App做例子,假如我们需要自动点击下图的 专栏 :
使用使用findAccessibilityNodeInfosByViewId寻找目标寻找目标
我们可以使用findAccessibilityNodeInfosByViewId(),通过id找到目标节点,关于View id,可以使用DDMS中的Dump View Hierarchy for UI
Automator,就是点击下图按钮(不知道如何打开eclipse或者AS的DDMS的同学可以自行百度):
稍等片刻,生成屏幕快照,并解析出View树,从右下的属性框就可以找到id,同时仔细看,包名也可以获取到啦~
剩余7页未读,继续阅读
weixin_38539053
- 粉丝: 4
- 资源: 944
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0