Использование службы доступности Android

Я использовал службу Accessibility в Android, чтобы обнаружить приложение переднего плана.

Я хочу прослушать 2 из доступных событий доступности

TYPE_VIEW_TEXT_CHANGED

TYPE_WINDOW_STATE_CHANGED

Я хочу слушать всех window state change события, которые работают, но для второго события, я хочу слушать view_text_changed событие только 1-2 заявки и не все.

Я прочитал и попробовал android:packageNames параметр в xml, но тогда это наложит ограничение на событие window_state_changed.

Есть ли другой способ сделать это??

2 ответа

Решение

К сожалению, нет способа указать интересные имена пакетов для указанных событий специальных возможностей. Вы должны просто использовать AccessibilityEvent#getPackageName для фильтрации интересующих вас пакетов.

Предполагая, что вы настроили свой AndroidManifest распознать AccessibilityServiceЯ добавляю другой необходимый код здесь на тот случай, если кто-то захочет получить прямой ответ.

Файл конфигурации службы доступности:

<?xml version="1.0" encoding="utf-8"?>
<accessibility-service xmlns:android= "http://schemas.android.com/apk/res/android"
    android:description="@string/accessibility_service_description"
    android:accessibilityEventTypes="typeWindowStateChanged|typeViewTextChanged"
    android:accessibilityFlags="flagDefault"
    android:accessibilityFeedbackType="feedbackSpoken"
    android:notificationTimeout="100"
    android:canRetrieveWindowContent="true"
    android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity"/>

Обратите внимание android:accessibilityEventTypes по мере необходимости. Если вы ограничите пакет в XML, вы не получите TYPE_WINDOW_STATE_CHANGED как правильно указано в вопросе.

Таким образом, вам также необходимо внести изменения в вашу реализацию AccessibilityService,

public class VoiceAccessibilityService extends android.accessibilityservice.AccessibilityService {
    private static String TAG = VoiceAccessibilityService.class.getName();

    @Override
    public void onAccessibilityEvent(AccessibilityEvent event) {

        if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED && event.getPackageName().equals("Your package names")) {
            Logger.d(TAG + " SHOW " + event.toString());

        }
    }

    @Override
    public void onInterrupt() {
        Logger.d(TAG + " interrupt");
    }
}

Надеюсь, поможет!

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