¿Cómo saber si Android TalkBack está activo?

Estoy desarrollando una aplicación que utiliza TalkBack para guiar a la gente a través de ella. Sin embargo, en esas situaciones quiero tener algunas diferencias sutiles en el diseño de la aplicación para la navegación es más fácil y también tienen salidas de voz adicionales (con TextToSpeech) para ayudar a guiar al usuario.

Mi problema es que solo quiero esos cambios y salidas adicionales si el usuario tiene activo TalkBack.

¿Hay alguna manera de saber si lo es? No encontré nada específico para acceder a la configuración de TalkBack directamente, pero esperaba que hubiera algún tipo de acceso a la configuración general del teléfono que pudiera hacerme saber lo que necesito.

Saludos y gracias de antemano.

Para un ejemplo, busque isScreenReaderActive() en el archivo HomeLauncher.java en la aplicación de shell sin ojos (vía el subproceso de grupos ).

Para resumir: se detectan todos los lectores de pantalla con Intents, luego consulta al proveedor de estado de cada uno para ver si está activo.

Si realmente desea limitarlo a TalkBack solamente, podría intentar comprobar el ResolveInfo.serviceInfo.packageName para cada resultado devuelto de queryIntentServices() para ver si coincide con el paquete de TalkBack.

La forma recomendada de hacerlo es consultar el AccessibilityManager para el estado habilitado de los servicios de accesibilidad.

 AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE); boolean isAccessibilityEnabled = am.isEnabled(); boolean isExploreByTouchEnabled = am.isTouchExplorationEnabled(); 

Novoda ha lanzado una biblioteca llamada accessibilitools que hace este cheque. Se consulta al administrador de accesibilidad para comprobar si hay servicios de accesibilidad habilitados que admitan el indicador de "retroalimentación hablada".

 AccessibilityServices services = AccessibilityServices.newInstance(context); services.isSpokenFeedbackEnabled(); 

Para mí, he resuelto este problema de esta manera, funciona bien en mi proyecto:

  1. Use getEnabledAccessibilityServiceList () para obtener todo el servicio de accesibilidad, un servicio cuyo estado está abierto estará en esta lista
  2. Talkback contiene una actividad llamada com.android.talkback.TalkBackPreferencesActivity, puede recorrer la lista para encontrar si el servicio de talkback está abierto

El código detallado a continuación:

  private static final String TALKBACK_SETTING_ACTIVITY_NAME = "com.android.talkback.TalkBackPreferencesActivity"; public static boolean accessibilityEnable(Context context) { boolean enable = false; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { try { AccessibilityManager manager = (AccessibilityManager) context.getSystemService(Context.ACCESSIBILITY_SERVICE); List<AccessibilityServiceInfo> serviceList = manager.getEnabledAccessibilityServiceList(AccessibilityServiceInfo.FEEDBACK_SPOKEN); for (AccessibilityServiceInfo serviceInfo : serviceList) { String name = serviceInfo.getSettingsActivityName(); if (!TextUtils.isEmpty(name) && name.equals(TALKBACK_SETTING_ACTIVITY_NAME)) { enable = true; } } } catch (Exception e) { if (Logging.isDebugLogging()) { e.printStackTrace(); } } } return enable; } 
  • ¿Cómo hacer clic en el botón en la configuración mediante AccessibilityService?
  • Cómo utilizar AccessibilityService para establecer texto en un EditText dentro de un navegador
  • Cómo comprobar si Talkback está activo en JellyBean
  • ¿Cómo usar los servicios de accesibilidad para "tomar acción para los usuarios"?
  • Android dispara un evento de accesibilidad personalizado desde un botón de ActionBar haga clic
  • Establecer texto en AccessibilityNodeInfo
  • Cómo obtener el texto seleccionado de AccessibilityNodeInfo
  • Cómo dirigir a los usuarios para habilitar el servicio de accesibilidad para mi aplicación
  • Cómo activar / desactivar todos los sonidos de la configuración de accesibilidad mediante programación en android?
  • Aplicación de Android: cómo leer el tamaño de fuente en Configuración?
  • Significado de diferentes tipos de retroalimentación para un servicio de accesibilidad en android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.