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

Задний план

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

startActivity(new Intent(android.provider.Settings.ACTION_ACCESSIBILITY_SETTINGS));

Вы также можете проверить, включил ли его пользователь, используя этот код.

Проблема

Иногда, даже если пользователь включил его, поскольку он много раз вызывает onAccessibilityEvent, пробуждая приложение, было бы неплохо иметь возможность временно отключить его.

Что я пробовал

Я попытался отключить службу как компонент, но она почему-то срабатывает только через несколько секунд:

private boolean isComponentEnabled() {
    final int componentEnabledSetting = getPackageManager().getComponentEnabledSetting(new ComponentName(this, ....class));
    return componentEnabledSetting == PackageManager.COMPONENT_ENABLED_STATE_ENABLED || componentEnabledSetting == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT;
}

public void setEnabled(boolean enabled) {
    ComponentName component = new ComponentName(this, ....class);
    getPackageManager().setComponentEnabledSetting(component,
            enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
}

Кроме того, повторное включение службы ничего не делает, кроме изменения ее состояния на включение, что означает отсутствие вызовов onAccessibilityEvent, даже если она включена.

Вопрос

Можно ли включить и отключить эту службу программно, чтобы избежать ненужных вызовов «onAccessibilityEvent» и избежать проблем с производительностью?


person android developer    schedule 21.01.2017    source источник