Android: Come forzare Esplora-By-Touch / Talkback per ripetere il ContentDescription della vista corrente in AccessibilityFocus?

Nella mia applicazione Android, ho una View che visualizza un'image e dispone di una ContentDescription associata.

Posso abilitare Impostazioni-> Accessibilità-> Talkback , con Esplora da touch nelle impostazioni di Talkback e poi toccare un singolo ContentDescription nella vista per leggere la voce ContentDescription ad alta voce.

  • Come sviluppare l'applicazione Augmented Reality per Android
  • spannable su android per textView
  • Ottieni APK dell'app. Installata
  • Utilizzando Realm.io per memorizzare i valori di denaro
  • Come utilizzare le classi java android in Phonegap?
  • Android - come definire ShapeDrawables in modo programmato?
  • Questo è tutto ciò che ci si aspettava finora.

    Tuttavia, vorrei che Esplora da toccare per ripetere la ContentDescription se singolo toccare di nuovo la stessa View . Ad esempio, la mia image e descrizione potrebbero essere aggiornate mentre ha l' AccessibilityFocus , quindi dicendo che la nuova frase sarebbe utile per l'utente. Come posso raggiungere questo objective?

    Ho provato a sperimentare View.clearFocus() e View.invalidate() , ma senza successo.

    Qualsiasi idea costruttiva sarebbe benvenuta.

    Aggiornare

    Avrei anche detto che voglio aggiungere supporto da API 8 in poi. Quindi, cerco di fare il meglio che posso con l'interface di Accessibility da API 4.

    Attualmente sto lavorando su una soluzione che utilizza View.clearFocus() seguito da View.requestFocus() per aggirare il problema di visualizzazione aggiornato. Questo sembra funzionare finora sul mio kit di prova con le API 8 e 16.

    Riprenderò nuovamente con il risultato finale, ma accolgo ulteriori suggerimenti nell'intervallo.

  • Accessibilità e Android WebView
  • Come posso utilizzare AccessibilityService.getWindows () per get un AccessibilityNodeInfo traversabile?
  • 'Attributo content descriptore mancante nell'image' nell'XML
  • Rendere accessibili le applicazioni Android (per le persone con disabilità) con PhoneGap
  • Quando si utilizza TalkBack, quale è il modo preferito per avvisare l'utente quando il contenuto di un TextView è stato modificato?
  • App Android: come leggere la dimensione del carattere in Impostazioni?
  • One Solution collect form web for “Android: Come forzare Esplora-By-Touch / Talkback per ripetere il ContentDescription della vista corrente in AccessibilityFocus?”

    Come promesso nella mia domanda, ecco i risultati della mia indagine e una soluzione di lavoro.

    Innanzitutto, grazie a alanv per il suo aiuto e supporto, e per rispondere alla domanda per le API successive (14 e più). Anche se non ha trovato la soluzione per API più vecchie, ha fornito informazioni critiche che mi hanno aiutato a trovare una risposta.

    Al momento della scrittura, non è ansible build un AccessibilityEvent con successo, a causa di un bug noto in TalkBack – vedere Invia evento di accessibilità non collegato alla vista per ulteriori dettagli. Se l'origine dell'evento è nullo, l'evento viene ignorato da TalkBack (v3.5.0_r105) e come AccessibilityEvent.setSource(View) apparso per la prima volta nell'API 14 , non è ansible impostare la sorgente prima di ciò – vedere Google Eyes-Free emettere # 379

    Tuttavia, è ansible fare Android generare tali events utilizzando View.requestFocus() come ho precedentemente suggerito.

    1. Rendere la tua vista focalizzabile nel layout XML utilizzando:

      android:focusable="true"
      android:focusableInTouchMode="true"

    2. Impostare il text parlato usando View.setContentDescription(text) in Activity.onCreate o con android:contentDescription="text" nel layout XML se è statico o in modo dinamico nel codice se necessario.

    3. Quando è richiesto il text parlato, spostare la messa a fuoco nella visualizzazione corretta utilizzando View.requestFocus() per triggersre un AccessibilityEvent .

    4. Per assicurare che una frase si ripeta (la mia domanda originale), call View.clearFocus() prima di richiedere la messa a fuoco nel passaggio precedente.

    Ho un'applicazione testata di questo approccio che funziona con API 8 e funziona anche con API 16. Dovrebbe funzionare tutto il return all'API 4, quando è stata prima introdotta l' API di Accessibilità .

    Questa soluzione potrebbe non essere necessaria per gli sviluppatori che supportno solo API Android più recenti (14 e versioni successive), ma ritengo che ci siano poche altre opzioni attualmente supportte da Accessibility nelle API precedenti. In bocca al lupo.

    Aggiornare

    Purtroppo, la risposta di alanv sembra essere scomparsa – forse cancellata – prendendo con sé tutti i dettagli e la discussione associati nei commenti. Ho cercato di recuperare i punti principali qui sotto.

    1. Per Android API 14 e versioni successive, è ansible creare events mirati come segue:

      if (mAccessibilityService.isEnabled()) { AccessibilityEvent event = AccessibilityEvent.obtain( AccessibilityEvent.TYPE_VIEW_FOCUSED); event.setSource(myView); // API 14 & later event.setClassName(myView.getClass().getName()); event.setPackageName(myView.getContext().getPackageName()); event.setEnabled(true); event.setContentDescription(text); myView.sendAccessibilityEventUnchecked(event); }

    2. Per Android API 16 e View.announceForAccessibility(text) successive, è ansible utilizzare View.announceForAccessibility(text) .

    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.