我正在创建一个应用程序,我需要收集状态栏通知。系统会提示用户允许我实现NotificationListenerService(API> = 18)或AccessibilityService(其他设备),并将它们重定向到设置屏幕。
当我使用API时< 18用户被重定向到辅助功能设置屏幕,他允许辅助功能服务,一切正常。但是,当用户处于18> =时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助服务。我的两个服务都在注册通知并通知我。
显然我可以检查消息来自哪个服务并做出相应的反应,但我更喜欢一些更清洁的解决方案。我不希望用户能够同时允许这两种服务(它们都出现在设置中)。
有没有办法为不同的API级别定义单独的清单文件或在<uses-sdk>
标记内声明<application>
,以便它们用于不同的API级别?当然,我们无法以编程方式创建服务 - 我们必须在清单中声明它们。
答案 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级别决定。