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)
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android中,我们可以使用BroadcastReceiver来监听网络变化。具体步骤如下: 1. 在AndroidManifest.xml文件中添加权限: ```xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> ``` 2. 创建一个继承自BroadcastReceiver的子类,用于监听网络状态变化: ```java public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { // 网络已连接 } else { // 网络未连接 } } } ``` 3. 在Activity中注册BroadcastReceiver: ```java private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); networkChangeReceiver = new NetworkChangeReceiver(); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(networkChangeReceiver); } ``` 当网络状态发生变化时,系统会发送一条名为"android.net.conn.CONNECTIVITY_CHANGE"的广播,我们在Activity中注册BroadcastReceiver并监听该广播,即可得知网络状态的变化

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值