2016-03-07 3 views
2

Я создаю приложение, в котором мне нужно собирать уведомления о статусной строке. Пользователям предлагается разрешить либо мою реализацию NotificationListenerService (API> = 18), либо AccessibilityService (другие устройства), и они перенаправляются на экран настроек.Различные файлы AndroidManifest для разных уровней API

Когда я нахожусь на API < 18 пользователь перенаправляется на экран настроек специальных возможностей, он разрешает службу специальных возможностей, и все в порядке. Однако, когда пользователь находится на 18> =, даже если пользователь перенаправлен на настройки уведомлений, он все равно может перейти к настройкам доступности, чтобы разрешить также службу специальных возможностей. Обе мои службы регистрируют уведомления и уведомляют меня об этом.

Очевидно, что я могу проверить, из какого сервиса приходит сообщение, и реагировать соответствующим образом, но я бы предпочел какое-то более чистое решение. Я не хочу, чтобы пользователь мог разрешать обе службы (оба они отображаются в настройках).

Есть ли способ сделать что-то вроде определения отдельных файлов манифеста для разных уровней API или объявить <uses-sdk> внутри тега <application>, чтобы они использовались для разных уровней API? И, конечно же, мы не можем создавать сервисы программно - мы должны объявить их в манифесте.

ответ

3

Шаг 1: Создайте булеву ресурс в res/values/, названный is18, установите false, и второй логический ресурс с именем isLessThan18, установите true.

Шаг 2: Создайте булеву ресурс в res/values-v18/, названный is18, установите true, и второй логический ресурс с именем isLessThan18, установите false.

Шаг № 3: Используйте android:enabled="@boolean/is18" для вашего <service> элемента для вашего NotificationListenerService.

Шаг №4: Используйте android:enabled="@boolean/isLessThan18" для вашего <service> элемента для вашего AccessibilityService.

Это позволит использовать только одну услугу на каждое устройство, соответствующее требованиям, установленным уровнем API.

+0

Можно ли определить что-то еще, чем bool? В частности, что-то вроде launchMode? – RominaV

+0

@RominaV: Я не уверен. Значения для 'android: launchMode' взяты из перечислимого списка. Я * думаю *, они преобразуются в целые числа. Вы * можете * определить количество ресурсов integer и использовать их, если сможете найти нужные значения целого числа. – CommonsWare

Смежные вопросы