AccessibilityService все onserviceconnected, но это не работает

Я делаю некоторую задачу с сервисом доступности. Все отлично работает, но мне нужно удалить конфигурацию моего xml и запустить службу из метода конфигурации onServiConnected, и вот здесь у меня проблема.

В журнале я вижу, что onServiceConnected работает, когда я включаю службу в своем телефоне, но она не работает с именем пакета, например, где я запускаю конфигурацию в access_xml_config.

Затем то, что я хочу сделать, - это иметь те же функциональные возможности, что и в access_xml_config, но в методе onServiceConnected.

Мой метод:

@Override
    @SuppressLint("NewApi")
    public void onServiceConnected() {
        super.onServiceConnected();
        Log.i(TAG, "onServiceConnected AccessibilityService");
        AccessibilityServiceInfo info = new AccessibilityServiceInfo();
        info.flags = AccessibilityServiceInfo.DEFAULT;
        info.getCanRetrieveWindowContent();
        info.notificationTimeout = 100;
        info.feedbackType = AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS;
        info.feedbackType = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
        info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
        info.feedbackType = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;
        info.packageNames = new String[]{"com.android.incallui"};
        this.setServiceInfo(info);

    }

манифест

 <service android:name=".VsAccessibilityCallScreenService"
            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
            <intent-filter>
                <action android:name= "android.accessibilityservice.AccessibilityService" />
            </intent-filter>

Это мой access_xml_config:

<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
    android:packageNames="com.android.incallui"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFlags="flagDefault|flagReportViewIds|flagIncludeNotImportantViews|flagRetrieveInteractiveWindows"
android:accessibilityFeedbackType="feedbackGeneric"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
android:description="@string/app_name"
    />

1 ответ

вы неправильно используете биты / целочисленные флаги:)

    info.feedbackType = AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS;
    info.feedbackType = AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS;
    info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC;
    info.feedbackType = AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS;

каждая следующая строка заменяет предыдущую

поэтому для вашего случая это должно быть:

    info.feedbackType = 
      AccessibilityServiceInfo.FLAG_RETRIEVE_INTERACTIVE_WINDOWS
    | AccessibilityServiceInfo.FLAG_INCLUDE_NOT_IMPORTANT_VIEWS
    | AccessibilityServiceInfo.FEEDBACK_GENERIC
    | AccessibilityServiceInfo.FLAG_REPORT_VIEW_IDS; 

коротко:

&   -  bitwise and
|   -  bitwise or
^   -  bitwise xor
~   -  bitwise not
<< -  bitwise shift left
>>  -  bitwise shift right

хорошее начало:

Я нашел ответчик... используя getServiceInfo();

@Override
    @SuppressLint("NewApi")
    public void onServiceConnected() {
        super.onServiceConnected();
        Log.i(TAG, "onServiceConnected AccessibilityService");
        accessibilityServiceInfo info;
        clientconfig = VsClientConfig.getInstance();
        info = getServiceInfo();
        info.packageNames = new String[]{"your.package.name"};
        setServiceInfo(info);

    }
Другие вопросы по тегам