隐式广播:如何保持前向后兼容

时间:2019-04-02 23:49:15

标签: android broadcastreceiver backwards-compatibility

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

对于我的Music Player应用程序,对于较早的版本,我需要在清单中声明以下操作:

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

我不知道android是否支持按api版本(例如资源中)声明清单文件。

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

谢谢

1 个答案:

答案 0 :(得分:1)

  

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

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

  

我不知道android是否支持按api版本声明清单文件(如资源)

不是真的。

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

  1. 对于Oreo之前和Oreo之后的版本具有单独的产品口味,并且清单中的<intent-filter>与Oreo之前的口味相关联的来源集。

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

但是,这些都不是必需的。记住,您将不会留下想要的广播。