1

我的 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());
4

2 回答 2

2

我找到了我的问题的答案。

在NotificationCompat.Builder的各种方法中,setContentText() 确定视觉显示的内容,但setTicker()是确定 TalkBack 读取的内容(如果有)的方法。

于 2015-02-02T07:47:20.347 回答
1

您很可能需要通过使您的应用可访问来通知 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);
    }
于 2015-01-26T15:42:16.767 回答