Отправить событие доступности, не связанное с просмотром

Мы собираемся отправить событие доступности (которое будет подхвачено TalkBack и т. Д.), Которое не связано с представлением.

Например, как я могу отправить событие доступности (например, обратная связь, говорящая "Данные загружены"), когда AsyncTask закончил?

3 ответа

Похоже, что текущая версия TalkBack игнорирует объявления, если AccessibilityEvent.getSource() возвращает null, поэтому лучше использовать Toast. Это дало дополнительное преимущество, обеспечивая постоянную обратную связь с пользователями, независимо от того, используют ли они TalkBack.

Toast.makeText(context, /** some text */, Toast.LENGTH_SHORT).show();

Обычно, однако, вы можете вручную создать AccessibilityEvent и отправить его через AccessibilityManager.

AccessibilityManager manager = (AccessibilityManager) context
        .getSystemService(Context.ACCESSIBILITY_SERVICE);
if (manager.isEnabled()) {
    AccessibilityEvent e = AccessibilityEvent.obtain();
    e.setEventType(AccessibilityEvent.TYPE_ANNOUNCEMENT);
    e.setClassName(getClass().getName());
    e.setPackageName(context.getPackageName());
    e.getText().add("some text");
    manager.sendAccessibilityEvent(e);
}

Вы можете использовать менеджер специальных возможностей напрямую (начиная с API 14), как сказал @alanv. Но начиная с API 16, вы должны предоставить представление.

final View parentView = view.getParent();
if (parentView != null) {
    final AccessibilityManager a11yManager =
            (AccessibilityManager) view.getContext().getSystemService(Context.ACCESSIBILITY_SERVICE);

    if (a11yManager != null && a11yManager.isEnabled()) {
        final AccessibilityEvent e = AccessibilityEvent.obtain();
        view.onInitializeAccessibilityEvent(e);
        e.getText().add("some text");
        parentView.requestSendAccessibilityEvent(view, e);
    }
}

Попробуйте использовать широковещательное сообщение, вы можете отправить намерение в Broadcast Receiver, затем в Receiver вы можете запустить уведомление или что-то еще.

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