Различные файлы 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.