AccessibilityService Addedin API level 4
java.lang.Object
↳ android.content.Context
↳ android.content.ContextWrapper
↳ android.app.Service
↳ android.accessibilityservice.AccessibilityService
简介(蹩脚的翻译):
无障碍服务旨在帮助残疾人使用Android设备和应用程序。它们在后台运行,当系统被触发时接收系统的回调。这样的事件表示用户界面中的一些状态转换,例如,焦点已经改变,按钮被点击等。这样的服务可以可选地请求查询活动窗口的内容的能力。可访问性服务的开发需要扩展该类并实现其抽象方法。
个人的一点理解:AccessibilityService是Google旨在帮助某些方面有障碍的人(比如聋哑或视力障碍),当AccessibilityService在手机上打开时,确保音频提示总是伴随另一个视觉提示或通知,这会使应用程序有更好的体验。它可以让你模拟点击事件、输入文本、列表滚动等,组合起来可以做些有趣的事儿,比如做一个伪小机器人让它做一连串操作,类似PC端的按键精灵。
一、AccessibilityService 的用法
1、继承AccessibilityService,需实现两个方法
①onAccessibilityEvent(),当用户界面发生变化时(比如模拟点击按钮、输入文本等),就会将事件传到此处,就可以做相应操作
②onInterrupt(),服务被中断的回调
public class MyAccessibilityService extends AccessibilityService{
public void onAccessibilityEvent(AccessibilityEvent event){
}
public void onInterrupt() {
}
}
2、在清单文件中注册
AccessibilityService 的应用程序必须在其应用程序清单中包含特定的声明,以将其视为Android系统的可访问性服务
注:对于与Android 4.1和更高的兼容性,清单还必须请求android.permission.BIND_ACCESSIBILITY_SERVICE权限
<manifest>
...
<uses-permission ... />
...
<application>
...
<service android:name=".MyAccessibilityService"
android:label="@string/accessibility_service_label"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<actionandroid:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
</service
<uses-permissionandroid:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />
</application>
</manifest>
3、AccessibilityService 必须提供一种配置,该配置指定服务处理的事件的类型和关于服务的附加信息。
可访问性服务的配置包含在AccessibilityServiceInfo类中,服务可以在运行时使用该类的实例和setServiceInfo() 设置和设置配置。但是,并非所有配置选项都可用此方法设置。
在应用程序的资源目录中创建的XML文件,
①创建app/src/main/res/xml/accessibility_service_config
<accessibility-servicexmlns:android="http://schemas.android.com/apk/res/android"
android:description="@string/accessibility_service_description"
android:packageNames="com.example.android.apis"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault"
android:accessibilityFeedbackType="feedbackSpoken"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"/>
常用属性解释:
-description 为用户允许应用的辅助功能的说明字符串
-accessibilityEventTypes:表示该服务对界面中的哪些变化感兴趣,即哪些事件通知,比如窗口打开,滑动,焦点变化,长按等.具体的值可以在AccessibilityEvent类中查到,如typeAllMask表示接受所有的事件通知.
-accessibilityFeedbackType:表示反馈方式,比如是语音播放,还是震动
-canRetrieveWindowContent:表示该服务能否访问活动窗口中的内容.也就是如果你希望在服务中获取窗体内容的化,则需要设置其值为true
-notificationTimeout:接受事件的时间间隔,通常将其设置为100即可
-packageNames:表示对该服务是用来监听哪个包的产生的事件
②引用
<service android:name=".MyAccessibilityService">
...
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/accessibility_service_config" />
</service>
注:当服务启动后,会调用onServiceConnected(),所以当你需要初始化一些数据时,可以在这里进行
设置-辅助功能-需要手动开启,毕竟要考虑安全问题。
二、说好的案例
1、先上图
2、demo地址:
https://github.com/YanChenYuan/AccessibilityServiceTest.git