我们希望发送一个无法链接到视图的辅助功能事件(将由TalkBack等提取)。
例如,当AsyncTask完成时,我怎么能发送一个辅助功能事件(例如说“数据下载”的对话)?
答案 0 :(得分:7)
如果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);
}
答案 1 :(得分:2)
您可以直接使用辅助功能管理器(自API 14起),如@alanv所述。 但是从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);
}
}
答案 2 :(得分:-1)
尝试使用广播消息,您可以发送一个Intent到广播接收器,然后在Receiver中你可以发起通知或其他东西。