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.
- Establecer texto en AccessibilityNodeInfo
- ¿Cómo hacer clic en el botón en la configuración mediante AccessibilityService?
- Establecer contentDescription para un diálogo personalizado
- Accesibilidad de Android com.android.settings: id / left_button sobre la fuerza no funciona
- Imagebutton me da error: Falta el atributo contentDescription en la imagen
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
- ¿Qué debo poner en el atributo contentDescription para las imágenes decorativas como el separador de campo?
- Cómo utilizar AccessibilityService para establecer texto en un EditText dentro de un navegador
- Android dispara un evento de accesibilidad personalizado desde un botón de ActionBar haga clic
- Significado de diferentes tipos de retroalimentación para un servicio de accesibilidad en android?
- ¿Cómo saber si Android TalkBack está activo?
- Cómo comprobar si Talkback está activo en JellyBean
- El teclado de detección está activo fuera de la aplicación en android
- Aplicación de Android: cómo leer el tamaño de fuente en Configuración?
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.
- ¿Cómo puedo leer / escribir octetos hexadecimales crudos de la corriente de entrada / salida en BluetoothChat?
- Android studio 2.3 refrescante gradle proyecto de tomar para siempre