在 DownloadManager 上下载并在 setDestinationInExternalFilesDir() 中保存文件在 Android 10 上不起作用
downloading on DownloadManager and saving file in setDestinationInExternalFilesDir() is not working on Android 10
我正在使用 DownloadManager
保存来自服务器的 mp4。我正在 storage/Emulated/0/Android/data/<packagename>/files/.Videos
上保存文件。我注意到 Android 9 和 android 11 正在成功下载它。但是在 Android 10 失败了。我试图将它附在 try{}catch{}
方法上,但我在日志上看不到任何内容。我也尝试在我的 Android Manifest.xml
上添加 android:requestLegacyExternalStorage="true"
但错误仍然存在。我还提到 this 问题 he/she 使用 setDestinationUri()
但我仍然找不到方法。顺便说一句,这是我的 DownloadRequest
:
片段
val path: String =
context.getExternalFilesDir(null)?.absolutePath + "/" + ".Videos"
val downloadmanager: DownloadManager =
context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val request: DownloadManager.Request = DownloadManager.Request(uri)
.setTitle(videoName)
.setDescription("Downloading")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
.setDestinationInExternalFilesDir(context, ".Videos", "test1.mp4")
//.setDestinationUri(Uri.fromFile(File(path, "test.mp4")))
//.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,videoName)
val downloadId = downloadmanager.enqueue(request)
非常感谢所有回复:)
你可以试试这个,它适用于我的 pdf
下载:
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, id+".pdf");
我想您可以通过更改 Environment
变量来使用它。
编辑 1.0
try{
Uri uri = Uri.parse(downloadPath);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); // Tell on which network you want to download file.
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // This will show notification on top when downloading the file.
request.setTitle("Downloading data..."); // Title for notification.
request.setVisibleInDownloadsUi(true);
request.addRequestHeader("Authorization", "bearer my bearertoken"));
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, id+".pdf");
((DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request); // This will start downloading
}catch(Exception e){
}
使用中仍有问题request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, "filename.pdf");
这对我有效:
val file = File(getPicturesDirPath(this), filename)
val destUri = Uri.fromFile()
request.setDestinationUri(destUri)
private fun getPicturesDirPath(activity: Context): String{
val file: File = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES)!!
if (!file.exists()) {
file.parentFile.mkdirs()
file.mkdir()
}
return file.absolutePath + "/"
}
确保将 Environment.DIRECTORY_PICTURES 更改为所需目录
我正在使用 DownloadManager
保存来自服务器的 mp4。我正在 storage/Emulated/0/Android/data/<packagename>/files/.Videos
上保存文件。我注意到 Android 9 和 android 11 正在成功下载它。但是在 Android 10 失败了。我试图将它附在 try{}catch{}
方法上,但我在日志上看不到任何内容。我也尝试在我的 Android Manifest.xml
上添加 android:requestLegacyExternalStorage="true"
但错误仍然存在。我还提到 this 问题 he/she 使用 setDestinationUri()
但我仍然找不到方法。顺便说一句,这是我的 DownloadRequest
:
val path: String =
context.getExternalFilesDir(null)?.absolutePath + "/" + ".Videos"
val downloadmanager: DownloadManager =
context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
val request: DownloadManager.Request = DownloadManager.Request(uri)
.setTitle(videoName)
.setDescription("Downloading")
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
.setDestinationInExternalFilesDir(context, ".Videos", "test1.mp4")
//.setDestinationUri(Uri.fromFile(File(path, "test.mp4")))
//.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,videoName)
val downloadId = downloadmanager.enqueue(request)
非常感谢所有回复:)
你可以试试这个,它适用于我的 pdf
下载:
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, id+".pdf");
我想您可以通过更改 Environment
变量来使用它。
编辑 1.0
try{
Uri uri = Uri.parse(downloadPath);
DownloadManager.Request request = new DownloadManager.Request(uri);
request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); // Tell on which network you want to download file.
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); // This will show notification on top when downloading the file.
request.setTitle("Downloading data..."); // Title for notification.
request.setVisibleInDownloadsUi(true);
request.addRequestHeader("Authorization", "bearer my bearertoken"));
request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, id+".pdf");
((DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE)).enqueue(request); // This will start downloading
}catch(Exception e){
}
使用中仍有问题request.setDestinationInExternalFilesDir(this, Environment.DIRECTORY_DOCUMENTS, "filename.pdf");
这对我有效:
val file = File(getPicturesDirPath(this), filename)
val destUri = Uri.fromFile()
request.setDestinationUri(destUri)
private fun getPicturesDirPath(activity: Context): String{
val file: File = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES)!!
if (!file.exists()) {
file.parentFile.mkdirs()
file.mkdir()
}
return file.absolutePath + "/"
}
确保将 Environment.DIRECTORY_PICTURES 更改为所需目录