【发布时间】:2019-01-11 10:44:36
【问题描述】:
我的应用 (targetSdk=25) 在清单中定义了一个广播接收器,如下所示:
<receiver android:name="my.package.DownloadManagerReceiver"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.DOWNLOAD_COMPLETE" />
</intent-filter>
</receiver>
只要 Android 的 DownloadManager 完成文件下载,我的 DownloadManagerReceiver 就会收到通知,因此我可以对下载的文件进行一些处理。
我正在将我的应用的 targetSdk 迁移到 27 (Oreo)。根据https://developer.android.com/about/versions/oreo/background#broadcasts,通过清单注册的隐式广播接收器不应该在 Android O 中工作(whitelisted exceptions 除外)。
但是,当我使用运行 Android 8.0 且 targetSdk=27 的模拟器运行我的应用程序时,在下载完成后,DownloadManager 仍会通知我在清单中定义的广播接收器。
我试图找到 DownloadManager 发送其广播的源代码以了解它如何发送其广播,但我找不到它。
有人知道android.intent.action.DOWNLOAD_COMPLETE 是显式广播而不是隐式广播吗?任何想法为什么我的接收器仍在接收该广播?
【问题讨论】:
标签: android broadcastreceiver android-manifest android-8.0-oreo android-download-manager