【问题标题】:Different AndroidManifest files for different API levels不同 API 级别的不同 AndroidManifest 文件
【发布时间】:2016-06-21 17:40:39
【问题描述】:

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

当我在 API = 上时,即使用户被重定向到通知设置,他仍然可以导航到辅助功能设置以允许辅助功能服务。然后我的两个服务都会注册通知并通知我。

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

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

【问题讨论】:

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


    【解决方案1】:

    第 1 步:在 res/values/ 中创建一个名为 is18 的布尔资源,设置为 false,并创建一个名为 isLessThan18 的第二个布尔资源,设置为 true。

    步骤#2:在res/values-v18/ 中创建一个布尔资源,命名为is18,设置为true,第二个布尔资源命名为isLessThan18,设置为false。

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

    步骤#4:使用android:enabled="@boolean/isLessThan18" 作为<service> 元素作为AccessibilityService。

    这将使每台设备仅启用一项服务,而正确的服务由 API 级别决定。

    【讨论】:

    • 是否可以定义除布尔值以外的其他内容?具体来说,像 launchMode?
    • @RominaV:我不确定。 android:launchMode 的值来自一个枚举列表。我认为它们被映射到整数。您或许能够定义integer 资源并使用这些资源,前提是您可以找到要使用的正确整数值。
    • @CommonsWare:我刚刚对 android:screenOrientation 做了类似的事情,它奏效了。将该参数设置为fullUser 之类的字符串值会破坏应用程序安装过程,但将参数设置为整​​数值(fullUser 为 13)有效。
    猜你喜欢
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多