我正在创建一个需要收集状态栏通知的应用程序。系统会提示用户允许我实现 NotificationListenerService(API >= 18)或 AccessibilityService(其他设备),然后他们将被重定向到设置屏幕。
当我在 API < 18 上时,用户被重定向到辅助功能设置屏幕,他允许辅助功能服务,一切正常。但是,当用户处于 18>= 时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助功能服务。然后我的两个服务都在注册通知并通知我。
显然,我可以检查消息来自哪个服务并做出相应的 react ,但我更喜欢一些更简洁的解决方案。我不希望用户能够允许这两种服务(它们都出现在设置中)。
有没有办法做一些事情,比如为不同的 API 级别定义单独的 list 文件或声明 <uses-sdk>
里面<application>
标记以便它们将用于不同的 API 级别?当然,我们不能以编程方式创建服务 - 我们必须在 list 中声明它们。
最佳答案
第 1 步:在 res/values/
中创建 bool 资源, 命名为 is18
, 设置为 false
,以及名为 isLessThan18
的第二个 bool 资源, 设置为 true
.
第 2 步:在 res/values-v18/
中创建 bool 资源, 命名为 is18
, 设置为 true
,以及名为 isLessThan18
的第二个 bool 资源, 设置为 false
.
第 3 步:使用 android:enabled="@boolean/is18"
为你的 <service>
NotificationListenerService
的元素.
第 4 步:使用 android:enabled="@boolean/isLessThan18"
为你的 <service>
AccessibilityService
的元素.
这将只为每台设备启用一项服务,适当的服务由 API 级别决定。
关于android - 不同 API 级别的不同 AndroidManifest 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35856163/