针对不同API级别的不同AndroidManifest文件

时间:2016-03-07 23:25:44

标签: android service android-4.2-jelly-bean

我正在创建一个应用程序,我需要收集状态栏通知。系统会提示用户允许我实现NotificationListenerService(API> = 18)或AccessibilityService(其他设备),并将它们重定向到设置屏幕。

当我使用API​​时< 18用户被重定向到辅助功能设置屏幕,他允许辅助功能服务,一切正常。但是,当用户处于18> =时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助服务。我的两个服务都在注册通知并通知我。

显然我可以检查消息来自哪个服务并做出相应的反应,但我更喜欢一些更清洁的解决方案。我不希望用户能够同时允许这两种服务(它们都出现在设置中)。

有没有办法为不同的API级别定义单独的清单文件或在<uses-sdk>标记内声明<application>,以便它们用于不同的API级别?当然,我们无法以编程方式创建服务 - 我们必须在清单中声明它们。

1 个答案:

答案 0 :(得分:6)

步骤1:在res/values/中创建一个布尔资源,名为is18,设置为false,第二个布尔资源名为isLessThan18,设置为{{1 }}

步骤2:在true中创建一个布尔资源,名为res/values-v18/,设置为is18,第二个布尔资源名为true,设置为{{1 }}

第3步:对isLessThan18的{​​{1}}元素使用false

步骤4:对android:enabled="@boolean/is18"的{​​{1}}元素使用<service>

这将为每个设备仅启用一个服务,其中一个服务由API级别决定。