隐式广播:如何保持 pre-oreo 向后兼容性

Implicit Broadcasts: how to retain pre-oreo backwards compatibility

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

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

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

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

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

谢谢

Now as of Oreo, Android apps should remove all implicit broadcasts for the manifest file.

欢迎您在清单中注册广播。您只是不会在 Android 8.0+.

上收到这些广播

I don't know if android supports declaring a manifest file per api version like in resources or not

不是真的。

如果出于某种原因您真的不想在 Android 8.0+ 的清单中包含 <intent-filter>,我可以想到两个选项:

  1. 为 pre-Oreo 和 post-Oreo 版本提供不同的产品口味,并在源集的清单中将 <intent-filter> 与您的 pre-Oreo 口味相关联.

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

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