Внедрение доступности на пользовательском представлении не дает вербальной обратной связи

Я включил доступ, и мое устройство говорит, когда я перемещаюсь.

У меня есть seekbar и реализовано следующее:

Выдержка из onTouchEvent :

 ... case MotionEvent.ACTION_MOVE: getParent().requestDisallowInterceptTouchEvent(true); setTouchAngle(pointToAngle(touchX, touchY)); score = getScoreFromAngle(angleStart,touchAngle); if (onScoreSetListener != null) { onScoreSetListener.onScorePoll(this, score); sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED); } break; ... 

onPopulateAccessibilityEvent метод:

  @Override public void onPopulateAccessibilityEvent(AccessibilityEvent event) { super.onPopulateAccessibilityEvent(event); LogUtils.i(TAG,"onPopulateAccessibilityEvent()",null); switch (event.getEventType()) { case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED: LogUtils.d(TAG,"dispatchPopulateAccessibilityEvent() TYPE_VIEW_TEXT_CHANGED",null); event.getText().add(String.valueOf(getScore())); break; } } 

Я вижу, что onPopulateAccessibilityEvent в LogCat успешно, но устройство не дает никакой обратной связи. Я ожидаю, что текущий счет будет прочитан, но ничего.

У кого-нибудь есть понимание?

Если вы расширяете ProgressBar , вы можете установить текст для исходящих событий TYPE_VIEW_SELECTED . Они автоматически отправляются, когда пользователь настраивает строку поиска.

 @Override public void onInitializeAccessibilityEvent(AccessibilityEvent event) { super.onInitializeAccessibilityEvent(event); event.getText().add(...); } 

Однако похоже, что у вас есть расширенный View . В этом случае вам нужно будет использовать небольшое обходное решение и инициировать объявление, отправив событие VIEW_FOCUSED на ICS или использовать API announceForAccessibility для JellyBean и выше. Для чего потребуется библиотека поддержки-v4 и будет выглядеть так:

 /** The parent context. Used to obtain string resources. */ private final Context mContext; /** * The accessibility manager for this context. This is used to check the * accessibility enabled state, as well as to send raw accessibility events. */ private final AccessibilityManager mA11yManager; /** * Generates and dispatches an SDK-specific spoken announcement. * <p> * For backwards compatibility, we're constructing an event from scratch * using the appropriate event type. If your application only targets SDK * 16+, you can just call View.announceForAccessibility(CharSequence). * </p> * * @param text The text to announce. */ private void announceForAccessibilityCompat(CharSequence text) { if (!mA11yManager.isEnabled()) { return; } // Prior to SDK 16, announcements could only be made through FOCUSED // events. Jelly Bean (SDK 16) added support for speaking text verbatim // using the ANNOUNCEMENT event type. final int eventType; if (Build.VERSION.SDK_INT < 16) { eventType = AccessibilityEvent.TYPE_VIEW_FOCUSED; } else { eventType = AccessibilityEventCompat.TYPE_ANNOUNCEMENT; } // Construct an accessibility event with the minimum recommended // attributes. An event without a class name or package may be dropped. final AccessibilityEvent event = AccessibilityEvent.obtain(eventType); event.getText().add(text); event.setEnabled(isEnabled()); event.setClassName(getClass().getName()); event.setPackageName(mContext.getPackageName()); // JellyBean MR1 requires a source view to set the window ID. final AccessibilityRecordCompat record = new AccessibilityRecordCompat(event); record.setSource(this); // Sends the event directly through the accessibility manager. If your // application only targets SDK 14+, you should just call // getParent().requestSendAccessibilityEvent(this, event); mA11yManager.sendAccessibilityEvent(event); }