本文主要是介绍【安卓开发】AccessibilityService学习,实现辅助点击功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一步:配置xml文件和AccessibilityService
在res下新建xml文件夹并在其中新建accessibility_service_config.xml文件,下面是配置这个xml的代码示例
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"android:accessibilityEventTypes="typeAllMask"android:accessibilityFeedbackType="feedbackAllMask"android:accessibilityFlags="flagDefault|flagReportViewIds|flagRetrieveInteractiveWindows|flagIncludeNotImportantViews"android:canRetrieveWindowContent="true"android:canPerformGestures="true"android:description="@string/accessibility_txt"android:notificationTimeout="100"android:packageNames="目标App包名"/>
创建继承AccessibilityService的类,并在AndroidManifest.xml中注册和配置
<serviceandroid:name="com.jbjtech.dyclickdemo.service.FloatDialogService"android:enabled="true"android:exported="false"android:foregroundServiceType="mediaProjection"android:label="描述"android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"><intent-filter><action android:name="android.accessibilityservice.AccessibilityService" /></intent-filter><meta-dataandroid:name="android.accessibilityservice"android:resource="@xml/accessibility_service_config" /></service>
第二步:获取界面里的控件属性
执行模拟点击,你首先需要获取目标App界面里的控件id,获取这些元素的方法有很多,下面介绍两种。
1.真机获取,使用Android Studio 3.0以后弃用Android Device Monitor,如果你的AS版本大于3.0,那么你可以在sdk的安装目录下找到tools文件夹,并在其中找到monitor.bat并打开。在monitor中选择手机,点击红圈。(不一定能成功获取,多尝试)
2.使用模拟器+Layout Inspector(模拟器已root,可随意获取)
第三步:利用获取到的控件id,执行模拟点击
在继承AccessibilityService类中重写的onAccessibilityEvent(AccessibilityEvent event)方法里获取根AccessibilityNodeInfo
@Overridepublic void onAccessibilityEvent(AccessibilityEvent event) {int eventType = event.getEventType();switch (eventType) {case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:AccessibilityOperate.getOperate().updateEvent(this, event);AccessibilityNodeInfo nodeInfo = FloatDialogService.this.getRootInActiveWindow();break;}}
利用我们找到的控件id以及根AccessibilityNodeInfo的findAccessibilityNodeInfosByViewId(viewId)方法找到控件的List<AccessibilityNodeInfo>。
让控件的List<AccessibilityNodeInfo>中子AccessibilityNodeInfo执行performAction(AccessibilityNodeInfo.ACTION_CLICK)方法实现模拟点击。
public boolean performClick(List<AccessibilityNodeInfo> nodeInfo) {AccessibilityNodeInfo node;for (int i = 0; i < nodeInfo.size(); i++) {node = nodeInfo.get(i);if (node.isEnabled() && node.isClickable()) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {return node.performAction(AccessibilityNodeInfo.ACTION_CLICK);}}}return false;}
判断控件的List<AccessibilityNodeInfo>是否展示
public boolean isTargetViewShow(List<AccessibilityNodeInfo> infos) {if (infos != null && infos.size() > 0) {return true;}return false;}
你能找到的控件id,以及具体点击顺序,可以根据自己喜好来设定。
demo下载地址:利用AccessibilityService实现抖Y直播间自动秒抢红包Demo-Android文档类资源-CSDN下载
App下载地址:
看播便利助手
完毕
这篇关于【安卓开发】AccessibilityService学习,实现辅助点击功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!