6

ビューにリンクされていないアクセシビリティ イベント (TalkBack などによって取得される) を送信しようとしています。

たとえば、AsyncTask が終了したときにアクセシビリティ イベント (「データがダウンロードされました」というトークバックなど) を送信するにはどうすればよいでしょうか?

4

3 に答える 3

10

現在のバージョンの TalkBack は、AccessibilityEvent.getSource() が null を返す場合、アナウンスを無視するように見えるため、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 に答える