Различные файлы AndroidManifest для разных уровней API


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

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

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

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

1 4

1 ответ:

Шаг №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.