Использование сервера специальных возможностей Android

предисловие

Чтобы использовать службу доступности, вы должны быть системным приложением, чтобы иметь разрешение. В противном случае никакое разрешение недействительно, и вы можете напрямую загрузить код.

1. Создайте настраиваемую службу AccessibilityService, которая наследует систему

public class AccessibilityService extends android.accessibilityservice.AccessibilityService {

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {
    }

    @Override
    public void onInterrupt() {

    }
}

2. В файл манифеста необходимо добавить следующие разрешения и определения службы.

<!-- 无障碍权限 -->
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE" />

<!-- 无障碍定义清单 -->
<service
            android:name="com.rishun.systemsetting.service.AccessibilityService"
            android:enabled="true"
            android:exported="true"
            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_services" />
        </service>

3. Создайте файл accessibility_services.xml в каталоге xml в каталоге ресурсов в соответствии с

accessibilityEventTypes: тип события, на которое следует реагировать (щелчок, длительное нажатие, слайд, уведомление и т. д.). какую информацию необходимо получить вашему приложению

description: Описание (вы увидите этот текст на странице специальных возможностей)

уведомлениеTimeout: интервал времени ответа 100

packageNames: имя пакета приложения, которому необходимо помочь, если не написано, это означает все приложения.

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:accessibilityEventTypes="typeAllMask"
    android:accessibilityFeedbackType="feedbackGeneric"
    android:accessibilityFlags="flagRequestFilterKeyEvents"
    android:canRetrieveWindowContent="true"
    android:canRequestFilterKeyEvents="true"
    android:description="@string/app_name"
    tools:ignore="MissingDefaultResource" />

4. Последний шаг можно вызвать в унаследованном классе Application.Этот метод должен открыть службу специальных возможностей, чтобы вы могли отслеживать события системных кнопок или другую информацию и статус интерфейса приложения в классе AccessibilityService, реализованном вами.

/**
     * 开启无障碍服务
     */
    public void openAccessibilityService(Context context){
        //是否已开启无障碍服务
        boolean isStartAccessibilityServiceEnable = false;
        AccessibilityManager accessibilityManager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE);
        if (accessibilityManager != null) {
            List<AccessibilityServiceInfo> accessibilityServices = accessibilityManager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_ALL_MASK);
            for (AccessibilityServiceInfo info : accessibilityServices) {
                if (info.getId().contains(context.getPackageName())) {
                    isStartAccessibilityServiceEnable = true;
                    Log.i("AccessibilityService", "已开启无障碍服务.");
                    break;
                }
            }
        }

        if (!isStartAccessibilityServiceEnable) {
            String enabledServices = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
            ComponentName selfComponentName = new ComponentName(context.getPackageName(), AccessibilityService.class.getCanonicalName());
            String flattenToStr = selfComponentName.flattenToString();
            if (enabledServices == null || !enabledServices.contains(flattenToStr)) {
                enabledServices += ":" + flattenToStr;
            }
            //开启服务
            isStartAccessibilityServiceEnable = Settings.Secure.putString(context.getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, enabledServices);
            Settings.Secure.putInt(context.getContentResolver(),Settings.Secure.ACCESSIBILITY_ENABLED, 1);
            Log.i("AccessibilityService", "开启无障碍服务,enable:"+isStartAccessibilityServiceEnable);
        }
    }

Guess you like

Origin blog.csdn.net/weixin_44715716/article/details/131558716