Уведомление 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);
}