在Android 8.0上,DownloadManager无法正常工作

6

DownloadManager在Android 8.0上无法正常工作。我不知道原因。有人可以帮助我吗?

这是我尝试过的:

val downloadBroadcastReceiver = DownloadBroadcastReceiver()
context.registerReceiver(downloadBroadcastReceiver, IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE))
request = DownloadManager.Request(Uri.parse(url))
val mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(folder + File.separator + fileName))
request.setMimeType(mimeType)
request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, fileName)
request.setTitle(title)
request.setDescription(description)
request.setNotificationVisibility(VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
request.allowScanningByMediaScanner()
id = downloadManager.enqueue(request)

看看这个:https://dev59.com/CKfja4cB1Zd3GeqP08mi#48130822 - Ahmad
1
@Ahmad不适用。在那个问题中,OP的问题是他设置了DownloadManager.Request.NETWORK_WIFI,而这里并非如此。 - Nicu Surdu
我有同样的问题。 - Mahdi
对我来说也一样。请帮帮我。 - le Mandarin
2个回答

1

请确保您的手机上没有启用任何VPN应用程序。在我的情况下,我有一个作为手机VPN运行的广告拦截器应用程序,它干扰了DownloadManager。


0
你可以通过检查DownloadManager中的状态来缩小问题类型。如果下载没有开始,那么它可能被暂停了。
 try (Cursor cursor = manager.query(query)) {
                if (cursor.moveToFirst()) {
                    int statusColumn = cursor.getColumnIndex(DownloadManager.COLUMN_STATUS);
                    int downloadStatus = cursor.getInt(statusColumn);
                    if (DownloadManager.STATUS_PAUSED == downloadStatus) {
                        int reasonColumn =   cursor.getColumnIndex(DownloadManager.COLUMN_REASON);
                        int reasonCode = cursor.getInt(reasonColumn);
                        Log.e(TAG, "Download paused: " + reasonCode);
                    } else if (DownloadManager.STATUS_SUCCESSFUL == downloadStatus
                            || DownloadManager.STATUS_FAILED == downloadStatus) {
                        Log.i(TAG, "Download Ended");
                    }
}

从那里开始,问题取决于您在上面的块中看到了什么,但是这里有一些常见情况:

如果您的网址使用https://,您可能会遇到此问题- 为什么https下载会暂停并显示PAUSED_WAITING_TO_RETRY?

如果您的网址使用http://但不适用于Android 9,则可能会看到此消息:不允许向192.168.1.2发送明文HTTP流量

如果您的URL是在Android 9上使用http://,您会看到这个:如何解决Android P DownloadManager停止并显示“不允许将明文HTTP流量发送到127.0.0.1”? 不幸的是,这是由于谷歌的一个错误引起的 - https://issuetracker.google.com/issues/114143692。唯一的解决方法是提供一个https:替代方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接