Android TalkBack 未播报通知
Android notification not announced by 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());
您很可能需要通过使您的应用程序易于访问来通知 TalkBack 您希望与其进行交互。 Here is the Android documentation 关于使应用程序易于访问。
还有一个视图设置,您可以启用它,以便它知道该视图对于可访问性很重要,但我认为这并不直接适用于您的通知问题。
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);
}
另请注意,如果您提供 View
,某些版本的 TalkBalk 只会读取文本
if (manager != null && manager.isEnabled()) {
final AccessibilityEvent e = AccessibilityEvent.obtain();
view.onInitializeAccessibilityEvent(e);
e.getText().add("some text for TalkBak");
parentView.requestSendAccessibilityEvent(view, e);
}
我找到了问题的答案。
在 NotificationCompat.Builder, setContentText() determines what is displayed visually, but setTicker() 的各种方法中,有一种方法确定 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());
您很可能需要通过使您的应用程序易于访问来通知 TalkBack 您希望与其进行交互。 Here is the Android documentation 关于使应用程序易于访问。
还有一个视图设置,您可以启用它,以便它知道该视图对于可访问性很重要,但我认为这并不直接适用于您的通知问题。
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);
}
另请注意,如果您提供 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);
}
我找到了问题的答案。
在 NotificationCompat.Builder, setContentText() determines what is displayed visually, but setTicker() 的各种方法中,有一种方法确定 TalkBack 读取的内容(如果有的话)。