1. AccessibilityService 是运行在本app的一个Service,是一个帮助残障人士使用的Service,却被用来做成RPA功能,通过它来实现自动点击,最为著名的就是微信抢红包的功能.
2. 先讲讲怎么使用这个服务,下一篇文章分析原理.(所有代码都基于Kotlin实现)
1.1 先定一个Service,继承AccessibilityService,实现2个抽象的方法
override fun onAccessibilityEvent(event: AccessibilityEvent) {
override fun onInterrupt() {
如果为了初始化相关的功能,可以在Service 连接成功的时候做一些初始化,重写
override fun onServiceConnected() {
注意这个类是在主线程中执行,所以不能执行长时间的任务,避免主线程的阻塞. 2. 2. AndroidManifest.xml 中 声明上述定义的Service
<service
android:name="com.sunshine.happiness.rpa.service.AppAccessibilityService"
android:description="@string/app_name"
android:exported="false"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/app_accessibility" />
</service>
上述的内容都是需要的 2. 3. xml 文件中定义app_accessibility.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="flagRequestAccessibilityButton|flagRetrieveInteractiveWindows|flagRequestFilterKeyEvents|flagReportViewIds|flagRequestEnhancedWebAccessibility|flagRequestTouchExplorationMode|flagIncludeNotImportantViews|flagDefault"
android:canPerformGestures="true"
android:canRequestEnhancedWebAccessibility="true"
android:canRequestFilterKeyEvents="true"
android:canRetrieveWindowContent="true"
android:canTakeScreenshot="true"
android:description="@string/task_accessibility_permission_title"
android:intro="@string/task_app_permission_title"
android:notificationTimeout="800"
android:packageNames="com.jingyao.easybike,com.tencent.mm,com.eg.android.AlipayGphone,com.taobao.taobao,com.unionpay,com.tencent.mobileqq,com.jingdong.app.mall,com.ss.android.ugc.aweme,com.ss.android.ugc.aweme.lite,com.android.settings,com.sankuai.meituan"
android:settingsActivity="com.sunshine.happiness.ui.activity.login.PhoneLoginActivity"
android:summary="@string/task_accessibility_permission_not_open"
android:tileService="@string/confirm_accessibility" />
相关属性可以参考官方文档
如果想要Service能正常使用,上述的属性需要填好.
完成上述的操作,您的应用已经可以使用无障碍服务了.