Проверка , если служба включена
/**
* Based on {@link com.android.settingslib.accessibility.AccessibilityUtils#getEnabledServicesFromSettings(Context,int)}
* @see <a href="https://github.com/android/platform_frameworks_base/blob/d48e0d44f6676de6fd54fd8a017332edd6a9f096/packages/SettingsLib/src/com/android/settingslib/accessibility/AccessibilityUtils.java#L55">AccessibilityUtils</a>
*/
public static boolean isAccessibilityServiceEnabled(Context context, Class<?> accessibilityService) {
ComponentName expectedComponentName = new ComponentName(context, accessibilityService);
String enabledServicesSetting = Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
if (enabledServicesSetting == null)
return false;
TextUtils.SimpleStringSplitter colonSplitter = new TextUtils.SimpleStringSplitter(':');
colonSplitter.setString(enabledServicesSetting);
while (colonSplitter.hasNext()) {
String componentNameString = colonSplitter.next();
ComponentName enabledService = ComponentName.unflattenFromString(componentNameString);
if (enabledService != null && enabledService.equals(expectedComponentName))
return true;
}
return false;
}
Использование:
boolean enabled = isAccessibilityServiceEnabled(context, MyAccessibilityService.class);
Обнаружение при услуга включена или отключена
Сделать обратный звонок:
ContentObserver observer = new ContentObserver() {
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
boolean accessibilityServiceEnabled = isAccessibilityServiceEnabled(context, MyAccessibilityService.class);
//Do something here
}
};
Подписаться:
Uri uri = Settings.Secure.getUriFor(Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES);
context.getContentResolver().registerContentObserver(uri, false, observer);
Отписаться, когда вы закончите:
context.getContentResolver().unregisterContentObserver(observer);
Обратите внимание, чтоэто не работает с getEnabledAccessibilityServiceList()
подходом , поскольку его значения не синхронизированы со значениями Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES
.Вот почему я думаю, что использование Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES
- это лучший универсальный подход.