Уведомление Android не объявлено TalkBack

Мое приложение для Android создает уведомление. Уведомление отображается правильно. Однако TalkBack не объявляет об уведомлении, как, например, при получении нового электронного письма. Если я отобразлю все уведомления и прокручиваю их, TalkBack прочтет текст моего уведомления. Однако я хочу, чтобы он автоматически объявлял об уведомлении, когда оно поднято.

String notificationText = getResources().getString(R.string.notifyText);
String notificationTitle = getResources().getString(R.string.notifyTitle);

NotificationCompat.Builder notificationBuilder =
    new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle(notificationTitle)
        .setContentText(notificationText)
    .setPriority(NotificationCompat.PRIORITY_MAX);

NotificationManager notificationManager =
    (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());

2 ответа

Решение

Я нашел ответ на свой вопрос.

Из различных методов NotificationCompat.Builder setContentText() определяет, что отображается визуально, но setTicker() - это метод, который определяет, что, если вообще что-то читается TalkBack.

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

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

android:importantForAccessibility="yes"

Вы также можете попробовать использовать AccessibilityEvent вместо отправки обычного уведомления (или, возможно, обоих). Таким образом, система знает, что событие предназначено специально для служб доступности и может быть тем, на что реагирует TalkBack.

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 for TalkBalk to announce");
    manager.sendAccessibilityEvent(e);
}

Также имейте в виду, что некоторые версии TalkBalk будут читать текст, только если вы предоставите View

if (manager != null && manager.isEnabled()) {
        final AccessibilityEvent e = AccessibilityEvent.obtain();
        view.onInitializeAccessibilityEvent(e);
        e.getText().add("some text for TalkBak");
        parentView.requestSendAccessibilityEvent(view, e);
    }
Другие вопросы по тегам