从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版本(例如资源中)声明清单文件。
因此,如何保持向后兼容性,因为较早的版本要求此广播在清单中声明。
谢谢
答案 0 :(得分:1)
从Oreo开始,Android应用应删除清单文件的所有隐式广播。
欢迎您在清单中注册广播。您只是不会在Android 8.0+上收到这些广播。
我不知道android是否支持按api版本声明清单文件(如资源)
不是真的。
如果出于某种原因您真的不想在Android 8.0+的清单中包含该<intent-filter>
,我可以考虑以下两种选择:
对于Oreo之前和Oreo之后的版本具有单独的产品口味,并且清单中的<intent-filter>
与Oreo之前的口味相关联的来源集。
具有两个<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+上被禁用。
但是,这些都不是必需的。记住,您将不会留下想要的广播。