ビューにリンクされていないアクセシビリティ イベント (TalkBack などによって取得される) を送信しようとしています。
たとえば、AsyncTask が終了したときにアクセシビリティ イベント (「データがダウンロードされました」というトークバックなど) を送信するにはどうすればよいでしょうか?
ビューにリンクされていないアクセシビリティ イベント (TalkBack などによって取得される) を送信しようとしています。
たとえば、AsyncTask が終了したときにアクセシビリティ イベント (「データがダウンロードされました」というトークバックなど) を送信するにはどうすればよいでしょうか?
現在のバージョンの 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);
}
@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);
}
}