android - 不同 API 级别的不同 AndroidManifest 文件

标签 android service android-4.2-jelly-bean

我正在创建一个需要收集状态栏通知的应用程序。系统会提示用户允许我实现 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/

相关文章:

android - ActionMode 菜单不隐藏菜单项

android - 适用于 Android、iOS 和 Win8 的低功耗蓝牙连接参数

java - 将 JSON 数据填充到 ListView

javascript - 使用 JS 和 HTML 使用 Web 服务

android - IntentService + SmsManager 没有收到 registeredReceivers 的调用

Android 4 及更高版本,多操作通知

Android Studio GeoDataClient无法解析

angular - 使用 firebase 在应用程序中路由无法正常工作

Android 4.0 与 4.2 API 差异

android - 操作栏未在 4.2.2 中显示