Activar / desactivar mediante programación la configuración de accesibilidad en un dispositivo Android

¿Cómo puedo habilitar / deshabilitar programaticamente un servicio de lector de pantalla Android, como TalkBack?

Estoy desarrollando una aplicación de tipo quiosco que se instalará en un dispositivo Android que se prestará a los visitantes mientras visitan un museo en particular. (Todavía estamos en el proceso de determinar qué dispositivo usaremos.) El plan es permitir que los usuarios utilicen nuestra aplicación y no tengan acceso a la aplicación de configuración de Android. Sin embargo, nos gustaría permitir a los usuarios configurar algunas configuraciones de accesibilidad. Cuando hayan terminado con el dispositivo, debemos restaurar todas las configuraciones a nuestros valores predeterminados.

La discusión en el enlace de abajo tiene muchos sugerir el lanzamiento de la aplicación de configuración de Android. Pero no queremos que los usuarios accedan a muchas otras configuraciones.

Cómo habilitar / deshabilitar el servicio de accesibilidad mediante programación en Android

Sólo las aplicaciones del sistema pueden habilitar / deshabilitar el servicio de accesibilidad mediante programación. Las aplicaciones del sistema pueden escribir directamente en la configuración db seguro para iniciar el servicio de accesibilidad.

Settings.Secure.putString(getContentResolver(),Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "com.packagename/com.packagename.componentname"); 

El siguiente permiso es necesario para escribir en la configuración db seguro:

 <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> 

Para aplicaciones que no son del sistema, la única forma de iniciar el servicio de accesibilidad es dirigirlas a la pantalla de configuración de accesibilidad por medio de la intención y dejar que el usuario inicie manualmente el servicio:

 Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); 

Creo que puede haber una manera de hacerlo si haces de tu aplicación un AccessibilityService (pero tendrías que habilitarlo manualmente después de instalarlo).

A continuación, en la clase AccessibilityService, dentro del método onAccessibilityEvent , puede explorar vistas (recursivamente) y realizar clics. En el ejemplo siguiente, haga clic en el elemento de TalkBack en la configuración. Después debe activar el botón de alternar en la siguiente pantalla. Puede hacer clic en los padres no en la vista del switch) – No he probado este código 🙂

 @Override public void onAccessibilityEvent(AccessibilityEvent event) { AccessibilityNodeInfo source = event.getSource(); if(event.getEventType()==AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) explore(source); } private void explore(AccessibilityNodeInfo view){ int count = view.getChildCount(); for(int i=0; i<count; i++){ AccessibilityNodeInfo child = view.getChild(i); if(!MODE_TALK_BACK_SCREEN){ if(child.getText()!=null && child.getText().toString().toLowerCase().contains("TalkBack")){ child.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK); MODE_TALK_BACK_SCREEN=true; return; } }else{ if("ToggleButton".equals(child.getClassName().toString())){ //there ony one toggle button on the screen child.getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK); performGlobalAction(GLOBAL_ACTION_BACK); performGlobalAction(GLOBAL_ACTION_BACK);//need to go back two time - i don't know if that will work :) return; } } explore(child); child.recycle(); } 

Así que ahora si abre la configuración de accesibilidad con Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS); Realizará los tecleos para usted – usted tendría que cubrir de alguna manera con la tostada de la pantalla completa o el servicio con la visión

Actualmente estoy trabajando en el modo de avión automático alternar y funciona – por lo que debe hacer el trabajo en su caso

Echar un vistazo a mi serviceconfig.xml

 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:description="@string/accessibility_service_description" android:packageNames="com.android.settings" android:accessibilityEventTypes="typeWindowStateChanged" android:accessibilityFlags="flagDefault" android:accessibilityFeedbackType="feedbackSpoken" android:notificationTimeout="100" android:canRetrieveWindowContent="true" android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" /> 

Desde lollipop no puede cambiar todas las configuraciones que rompen la política de seguridad. Algunos de ellos pueden tener acceso, pero usted tiene que tomar el permiso para eso. Así que por favor no pierdas tiempo con eso.

  • Enfoque en movimiento dentro de un FrameLayout
  • Cómo dirigir a los usuarios para habilitar el servicio de accesibilidad para mi aplicación
  • ¿Cómo codificar Android para los discapacitados visuales?
  • La casilla de verificación centrada en estilos no se puede comprobar cuando se utiliza TalkBack o VoiceOver
  • Eliminar el foco de ActionBar android Accessibility
  • ¿Cómo usar los servicios de accesibilidad para "tomar acción para los usuarios"?
  • Cómo activar / desactivar todos los sonidos de la configuración de accesibilidad mediante programación en android?
  • ¿Cómo 'interrumpir' una acción de ser realizada en AccessibilityService?
  • AccessibilityNodeInfo - enviar texto
  • Cómo obtener el texto seleccionado de AccessibilityNodeInfo
  • Android internos y limitaciones de memoria / procesador?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.