Как определить, когда пользователь отключает службу специальных возможностей в Android?

Я разрабатываю службу специальных возможностей для Android. Я хочу отключить некоторые функции, когда пользователь отключает службу специальных возможностей, но я не уверен, как я могу это обнаружить.

Я думал, когда пользователь выключит его, он вызовет onDestroy(), но, видимо, он не вызывается.

Есть ли способ узнать, когда пользователь отключает службу специальных возможностей? Или есть функция, которая вызывается всякий раз, когда пользователь выключается?

(На всякий случай разрабатываю под Android Wear.)

Спасибо большое!! Я ценю вашу помощь! :)


person user3415167    schedule 02.05.2018    source источник
comment
AFAIK, я не думаю, что для этого есть действие System Broadcast. Поэтому вам нужно проверять во время выполнения. Для получения дополнительной информации прочтите developer.android.com/reference/android/accessibilityservice/. .   -  person ADM    schedule 02.05.2018
comment
Для меня метод onDestroy AccessibilityService вызывается надежно, если пользователь его отключает.   -  person Phoca    schedule 20.09.2018


Ответы (2)


interface AccessibilityManager.AccessibilityStateChangeListener

Слушатель состояния доступности системы. Чтобы отслеживать изменения состояния доступности на устройстве, реализуйте этот интерфейс и зарегистрируйте его в системе, вызвав addAccessibilityStateChangeListener.

Пример:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ...
    AccessibilityManager am = (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
    am.addAccessibilityStateChangeListener(new AccessibilityManager.AccessibilityStateChangeListener() {
        @Override
        public void onAccessibilityStateChanged(boolean b) {
            Log.d(TAG,"onAccessibilityStateChanged b=" + b);
            updateServiceStatus(b);
        }
    });
    updateServiceStatus(am.isEnabled());
}

Дополнительные примеры java см. На programcreek.com .

person naXa    schedule 03.05.2018
comment
К сожалению, это только проверяет, включена ли какая-либо служба доступности. Он срабатывает, когда первая служба включена или последняя отключена. То же самое относится к вашему первому ответу и AccessibilityManager.isEnabled - person Phoca; 20.09.2018
comment
Как сказал @Phoca, этот метод ведет себя не так, как хотелось бы. Но accessibilityService будет вызывать onDestroy при отключении - person galaxigirl; 17.02.2019

Я не знаю ни одного события, трансляции или обратного вызова, которые уведомляют приложения об изменениях состояния в Службе доступности. Лучшее, что я могу придумать, - это время от времени проверять статус службы вручную:

AccessibilityManager am = (AccessibilityManager) getSystemService(ACCESSIBILITY_SERVICE);
boolean isAccessibilityEnabled = am.isEnabled();

Документы: AccessibilityManager # isEnabled ().

person naXa    schedule 02.05.2018
comment
Будет ли это проверять, включена ли какая-либо из служб специальных возможностей, или проверять наличие конкретной службы специальных возможностей? - person user3415167; 03.05.2018
comment
@ user3415167 Посмотрите на мой второй ответ. Похоже на то, что вы ищете. - person naXa; 03.05.2018