【问题标题】:Implicit Broadcasts: how to retain pre-oreo backwards compatibility隐式广播:如何保持 pre-oreo 的向后兼容性
【发布时间】:2019-04-02 23:49:14
【问题描述】:

现在从 Oreo 开始,Android 应用应该删除清单文件中的所有隐式广播。

对于我的音乐播放器应用程序,对于早期版本,我需要在清单中声明这些操作:

       <intent-filter>
            <action android:name="android.intent.action.MEDIA_BUTTON" />
            <action android:name="android.intent.action.HEADSET_PLUG" />
        </intent-filter>

我不知道android是否支持像在资源中那样为每个api版本声明一个清单文件。

那么如何保持向后兼容性,因为早期版本需要在清单中声明此广播。

谢谢

【问题讨论】:

    标签: android broadcastreceiver backwards-compatibility


    【解决方案1】:

    现在从 Oreo 开始,Android 应用应该移除清单文件的所有隐式广播。

    欢迎您在清单中注册广播。您只是不会在 Android 8.0+ 上收到这些广播。

    我不知道android是否支持像在资源中那样为每个api版本声明一个清单文件

    不是真的。

    如果出于某种原因您真的不想在 Android 8.0+ 的清单中包含 &lt;intent-filter&gt;,我可以考虑两种选择:

    1. 为 pre-Oreo 和 post-Oreo 版本提供单独的产品风味,并在清单中为源集提供 &lt;intent-filter&gt; 与您的 pre-Oreo 风味相关联。

    2. 有两个&lt;receiver&gt; 元素,指向不同的接收器类,其中一个只是另一个的简单子类。在两个&lt;receiver&gt; 元素之一上,有你的&lt;intent-filter&gt;。然后,有一个res/values/bools.xml 文件将布尔资源(例如listenToMusic)定义为true,还有一个res/values-v26/bools.xml 文件定义与false 相同的资源。在&lt;receiver&gt;&lt;intent-filter&gt; 中,有android:enabled="@bool/listenToMusic",这样特定的接收器(及其&lt;intent-filter&gt;)将在Android 8.0+ 上被禁用。

    但是,这两个都不需要。请不要理会您的清单,请记住您不会收到所需的广播。

    【讨论】:

    • 你的第二个选项很聪明:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    相关资源
    最近更新 更多