1.继承系统的AccessibilityService服务,实现自己的辅助功能服务
class MyAccessibilityService: AccessibilityService(){
companion object {
const val TAG = "MyAccessibilityService"
}
override fun onAccessibilityEvent(event: AccessibilityEvent) {
val eventType = event.eventType
if (eventType == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) {
val pkgName = event.packageName?.toString()
val className = event.className?.toString()
println("[$TAG] 当前应用包名:$pkgName 类名:className:$className")
}
}
override fun onInterrupt() {
}
override fun onServiceConnected() {
super.onServiceConnected()
///可以在这里地方来监听辅助功能开关开启成功,在这里发送一个广播,在外面接收
println("[$TAG] 辅助功能开启成功")
}
}
2.在AndroidManifest.xml里面注册服务
<service
android:name=".MyAccessibilityService"
android:label="@string/accesibility_title"
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/accessibility_service_config"/>
</service>
注意点:
1.label字段:辅助功能名称,该名称会显示在系统的设置里面
2.必须要设置 android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"权限
3.必须要设置
4.必须设置
5.需要在value/xml目录下面新建一个辅助功能配置 accessibility_service_config.xml
代码如下:
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeWindowStateChanged"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagReportViewIds"
android:description="@string/accessibility_service_description"
android:notificationTimeout="100" />
解释:
1.android:accessibilityEventTypes监听事件类型
2.android:description开启辅助功能时,设置页面开关处的文案描述
###3.判断辅助功能开关状态
/**
* 判断辅助功能是否已经开启
*/
@JvmStatic
fun isAccessibilitySettingsOn(context: Context): Boolean {
var accessibilityEnabled = 0
try {
accessibilityEnabled = Settings.Secure.getInt(
context.contentResolver,
Settings.Secure.ACCESSIBILITY_ENABLED
)
} catch (e: Settings.SettingNotFoundException) {
e.printStackTrace()
}
if (accessibilityEnabled == 1) {
val services = Settings.Secure.getString(
context.contentResolver,
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES
)
if (services != null) {
return services.lowercase(Locale.getDefault()).contains(context.packageName.lowercase(Locale.getDefault()))
}
}
return false
}
4.打开辅助功能
/**
* 引导打开辅助功能设置页面
*/
@JvmStatic
fun openAccessibilitySettingPage(context: Context) {
val intent = Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS)
if (context !is Activity) {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
context.startActivity(intent)
}