Как программно включить/отключить службу доступности в 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