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

van*_*art 4 service android android-4.2-jelly-bean

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

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

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

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

Com*_*are 6

步骤1:创建一个布尔资源in res/values/,named is18,set to false,以及另一个名为isLessThan18,设置为的布尔资源true.

步骤2:创建一个布尔资源res/values-v18/,名为is18,设置为true,以及第二个名为isLessThan18,设置为的布尔资源false.

第3步:android:enabled="@boolean/is18"用于你的<service>元素NotificationListenerService.

第四步:android:enabled="@boolean/isLessThan18"用于你的<service>元素AccessibilityService.

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