6

我们希望发送未链接到视图的可访问性事件(将由 TalkBack 等接收)。

例如,当 AsyncTask 完成时,我如何发送可访问性事件(例如,对讲说“数据已下载”)?

4

3 回答 3

10

如果 AccessibilityEvent.getSource() 返回 null,当前版本的 TalkBack 似乎会忽略公告,因此您最好使用 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);
}
于 2014-02-27T06:02:29.680 回答
3

您可以像@alanv 所说的那样直接使用可访问性管理器(从 API 14 开始)。但从 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);
    }
}
于 2015-01-07T14:08:23.257 回答
-1

尝试使用广播消息,您可以向广播接收器发送一个意图,然后在接收器中您可以启动通知或其他东西。

于 2014-02-26T16:50:09.917 回答