Различные файлы AndroidManifest для разных уровней API
Я создаю приложение, в котором мне нужно собирать уведомления в строке состояния. Пользователям предлагается разрешить либо мою реализацию NotificationListenerService (API >= 18), либо AccessibilityService (другие устройства), и они перенаправляются на экран настроек.
Когда я нахожусь на API =, даже если пользователь перенаправлен на уведомление настройки он все еще может перейти к настройкам специальных возможностей, чтобы разрешить также службу специальных возможностей. Затем обе мои службы регистрируют уведомления и уведомляют меня об этом.
Очевидно, я могу проверить, из какой службы приходит сообщение, и отреагировать соответствующим образом, но я предпочел бы более чистое решение. Я не хочу, чтобы пользователь мог разрешить обе службы (они оба появляются в настройках).
Есть ли способ сделать что-то вроде определения отдельных файлов манифеста для различные уровни API или объявить <uses-sdk>
внутри тега <application>
, чтобы они использовались для разных уровней API? И конечно, мы не можем создавать сервисы программно - мы должны объявлять их в манифесте.
1 ответ:
Шаг №1: Создайте логический ресурс в
Шаг №2: Создайте логический ресурс вres/values/
с именемis18
, равнымfalse
, и второй логический ресурс с именемisLessThan18
, равнымtrue
.res/values-v18/
с именемis18
, равнымtrue
, и второй логический ресурс с именемisLessThan18
, равнымfalse
. Шаг №3: Используйтеandroid:enabled="@boolean/is18"
для вашего элемента<service>
для вашего элементаNotificationListenerService
. Шаг №4: Используйтеandroid:enabled="@boolean/isLessThan18"
для вашего элемента<service>
для вашего элементаAccessibilityService
.Это позволит использовать только одну службу на устройство, при этом правильный, продиктованный уровнем API.