android - pantalla - no puedo desactivar talkback samsung
Cómo habilitar/deshabilitar mediante programación el servicio de accesibilidad en Android (7)
Me gustaría habilitar / deshabilitar programáticamente los Servicios de accesibilidad enumerados en Configuración-> Opción de accesibilidad.
Podría iniciar la Intención de Accesibilidad como a continuación:
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
Pero no tengo idea de cómo habilitar los servicios enumerados en la vista a través de mi código.
Por favor, dame tus puntos de vista.
AccessibilityService es especial y no puede iniciarse programáticamente.
Lo mejor que puede hacer es abrir manualmente la configuración de accesibilidad con:
Intent intennt = new Intent (Settings.ACTION_ACCESSIBILITY_SETTINGS)
y comience la intención; también puede hacerlo desde el archivo prefernece xml:
intento android: acción = "android.settings.ACCESSIBILITY_SETTINGS"
Desde Android 6.0 puedes usar:
adb shell settings put secure enabled_accessibility_services packagname/servicename
La configuración.db de versiones anteriores ya no está presente en Android 6.0.
En Android 7 (API 24), un AccessibilityService puede deshabilitarse mediante programación llamando al método disableSelf () .
Por si acaso alguien todavía intenta apagar el Talkback desde adb cuando está atrapado en su pantalla de bloqueo ingresando la contraseña o el pin. Una cosa que puedes probar es adb shell am force-stop com.google.android.marvin.talkback
Encontré esta publicación: ¿Cómo verificar programáticamente si un servicio está declarado en AndroidManifest.xml? . La respuesta superior habla sobre PackageManager, que le dice qué se está ejecutando.
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 su nombre de paquete y classname
es el nombre de clase de su servicio de accesibilidad.
Si necesita habilitar varios servicios o no quiere borrar la configuración anterior, puede usar :
para separar otros servicios.
También es posible que deba ejecutar como una aplicación de 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 podría encontrar algo de suerte en /data/data/com.android.providers.settings/databases/settings.db/secure
, que es donde Android almacena la configuración segura.