Android Oreo(API26)和Android.app.DownloadManager

Android Oreo(API26)和Android.app.DownloadManager,android,kotlin,android-download-manager,download-manager,android-8.0-oreo,Android,Kotlin,Android Download Manager,Download Manager,Android 8.0 Oreo,伙计们! 这段代码在Android Oreo上不起作用(但在旧版本上可以,我可以看到通知和DownloadManager.ACTION\u DOWNLOAD\u COMPLETEbroadcast消息) Kotlin testButton.setOnClickListener { val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager val uri = Uri.par

伙计们! 这段代码在Android Oreo上不起作用(但在旧版本上可以,我可以看到通知和
DownloadManager.ACTION\u DOWNLOAD\u COMPLETE
broadcast消息)

Kotlin

testButton.setOnClickListener {
    val downloadManager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
    val uri = Uri.parse("[url for a mp3 file]")
    val request = DownloadManager.Request(uri)

    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI)
    request.setAllowedOverRoaming(false)
    request.setTitle("Test mp3")
    request.setDescription("Wow!")
    request.setVisibleInDownloadsUi(true)
    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "/GadgetSaint/"  + "/" + "Sample" + ".mp3")

    val reference = downloadManager.enqueue(request)
}

我发现API 26模拟器通过移动数据模拟网络请求,因此最简单的解决方法是添加
network\u mobile
标志(至少用于调试
下载管理器
):


嗨,你知道为什么会这样吗?似乎这是一个与模拟器相关的问题,我找到了一个解决方法:request.setAllowedNetworkTypes(DownloadManager.request.NETWORK\u WIFI或DownloadManager.request.NETWORK\u MOBILE)哦,太棒了!你应该把它作为一个答案张贴出来——我在这里发疯了,我在浏览所有api差异,看看他们是否只是忘记记录更改哦,我找到了原因!我的模拟器设置为在移动数据上而不是在wifi上运行:
request.setAllowedNetworkTypes(DownloadManager.Request.NETWO‌​RK_WIFI | DownloadManager.Request.NETWORK_MOBILE)