Как программно включить/отключить службу доступности в Android
Я хотел бы программно включить/отключить службы доступности, перечисленные в разделе "Настройки- > Доступность".
Я мог бы запустить Intibility Intent, как показано ниже:
Intent intent = new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS);
startActivityForResult(intent, 0);
Но я не знаю, как включить службы, перечисленные в представлении, через мой код.
Пожалуйста, предоставьте мне свои мнения.
Ответы
Ответ 1
Я нашел решение для меня, позвонив
Settings.Secure.putString(getContentResolver(),
Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES, "pkgname/classname");
Settings.Secure.putString(getContentResolver(),
Settings.Secure.ACCESSIBILITY_ENABLED, "1");
Где pkgname
- ваше имя пакета, а classname
- имя класса вашей службы доступности.
Если вам нужно включить несколько служб или вы не хотите уничтожать предыдущие настройки, вы можете использовать :
для разделения других служб.
Также вам может потребоваться запустить как системное приложение , и вам могут потребоваться следующие разрешения
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
Однако, согласно @Rupert Rawnsley, это может не работать в некоторых версиях Android, я работаю над Android 4.0.4 и надеюсь, что это сработает для вас.
PS. Если это не сработает, возможно, вам удастся найти удачу в /data/data/com.android.providers.settings/databases/settings.db/secure
, где Android хранит безопасные настройки.
Ответ 2
AccessibilityService является специальным и не может быть запущен программно.
Ответ 3
Лучшее, что вы можете сделать, - это вручную открыть параметры accessibilty с помощью:
Цель намерения = новый намерение (Settings.ACTION_ACCESSIBILITY_SETTINGS)
и запустите намерение - вы также можете сделать это из XML файла prefernece:
Цель андроида: action = "android.settings.ACCESSIBILITY_SETTINGS"
Ответ 4
Из Android 6.0 вы можете использовать:
adb shell settings put secure enabled_accessibility_services packagname/servicename
Установки settings.db из старых версий больше не присутствуют на Android 6.0.
Ответ 5
В Android 7 (API 24) AccessibilityService может программно отключить себя, вызывая метод disableSelf().
Ответ 6
На всякий случай кто-то все еще ищет отключить отзыв из adb, когда вы застряли на экране блокировки, введя пароль или контакт. Одна вещь, которую вы можете попробовать: adb shell am force-stop com.google.android.marvin.talkback
Ответ 7
Я нашел этот пост: Как программно проверить, объявлена ли служба в AndroidManifest.xml?. В верхнем ответе рассказывается о PackageManager, который сообщает вам, что работает.