Cómo habilitar / deshabilitar el servicio de accesibilidad mediante programación en Android
Quisiera habilitar / deshabilitar los servicios de accesibilidad mediante programación en la opción Ajustes-> Accesibilidad.
Podría comenzar Accesibilidad Intent como abajo:
- Realizar cambios en la interfaz de usuario de la actividad principal desde el subproceso en Service
- Cómo actualizar la ubicación de google map v2 desde el servicio de fondo android
- Ocultar notificación de servicio de primer plano mientras la actividad es visible
- Comprobar si el usuario ha concedido NotificationListener acceso a mi aplicación
- Actualización de la interfaz de usuario desde un servicio (mediante un controlador?)
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS); startActivityForResult(intent, 0);
Pero no tengo ni idea de cómo habilitar los servicios enumerados en la vista a través de mi código.
Por favor, proporcione sus opiniones.
- Android: mensajes de Handler retrasados al final del hilo de trabajo
- Habilitar GPS programáticamente Android (sin navegar a los ajustes de ubicación)
- Acceso al controlador de subprocesos de interfaz de usuario desde un servicio
- ¿Cómo actualizo el texto de notificación de un servicio de primer plano en Android?
- Servicio con Overlay - presione el botón de retroceso
- El servicio de Android no se puede iniciar debido a un ClassNotFoundException de una clase que ya no existe
Encontré una solución que funcionó para mí llamando
Settings.Secure.putString(getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "pkgname/classname"); Settings.Secure.putString(getContentResolver(), Settings.Secure.ACCESSIBILITY_ENABLED, "1");
Donde pkgname
es el nombre del paquete y el classname
es el nombre de la clase de su servicio de accesibilidad.
Si necesita habilitar varios servicios o no desea destory los ajustes anteriores, puede usar :
para separar otros servicios.
También puede ser necesario ejecutarlo como una aplicación del sistema y es posible que necesite los siguientes permisos
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
Sin embargo, de acuerdo con @Rupert Rawnsley esto podría no funcionar en algunas versiones de Android, estoy trabajando en Android 4.0.4 y espero que funcione para usted.
PD. Si no funciona, tal vez pueda encontrar algo de suerte en /data/data/com.android.providers.settings/databases/settings.db/secure
, ahí es donde Android almacena la configuración segura.
AccessibilityService es especial y no se puede iniciar mediante programación.
Lo mejor que puedes hacer es manualmente abrir la configuración de accessibilty con:
Intención intention = new Intent (Settings.ACTION_ACCESSIBILITY_SETTINGS)
y comenzar la intención – también puede hacerlo desde el archivo xml prefernece:
intento android: action = "android.settings.ACCESSIBILITY_SETTINGS"
En Android 7 (API 24), un AccessibilityService puede desactivarse mediante programación llamando al método disableSelf () .
Desde Android 6.0 puedes usar:
adb shell settings put secure enabled_accessibility_services packagname/servicename
El settings.db de versiones anteriores ya no está presente en Android 6.0.
Apenas en caso de que cualquier persona todavía intente apagar el talkback de adb cuando usted se pega en su pantalla de la cerradura que introduce la contraseña o el perno. Una cosa que puedes intentar es adb shell am force-stop com.google.android.marvin.talkback
Encontré este post: ¿Cómo verificar mediante programación si un servicio está declarado en AndroidManifest.xml? . La respuesta superior habla de PackageManager, que le indica lo que está ejecutando.