Android辅助功能AccessibilityService监听当前包名变化

Posted 废墟的树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android辅助功能AccessibilityService监听当前包名变化相关的知识,希望对你有一定的参考价值。

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)
    

以上是关于Android辅助功能AccessibilityService监听当前包名变化的主要内容,如果未能解决你的问题,请参考以下文章

Android辅助功能基本操作

Android辅助功能AccessibilityService的使用

Android辅助功能AccessibilityService的使用

如何启用从设置中删除动画-> 辅助功能 android

Android辅助功能AccessibilityService监听当前包名变化

Android辅助功能AccessibilityService监听当前包名变化