问题描述
我的代码的问题是,它正在下载文件,并且在图库中显示的路径如下 => "/storage/emulated/0/Download/filename.jpg"
但是当我点击完成的下载通知时,它会打开一个带有 URI =>“content://com.android.providers.downloads.documents/document/7123”的文件
它是 0kb。
DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
//Setting title of request
request.setTitle(fileName);
request.setAllowedOverRoaming(true);
request.allowScanningByMediaScanner();
String mimeType =
MimeTypeMap.getSingleton().getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(url));
request.setAllowedOverMetered(true);
if (!Utils.checkNullOrblank(mimeType))
request.setMimeType(mimeType);
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)
{
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,fileName);
}else
request.setDestinationInExternalPublicDir(filepath,fileName);
downloadId = downloadManager.enqueue(request);
} catch (Exception e) {
e.printstacktrace();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Downloads.TITLE,fileName);
contentValues.put(MediaStore.Downloads.disPLAY_NAME,fileName);
contentValues.put(MediaStore.Downloads.MIME_TYPE,mimeType);
contentValues.put(MediaStore.Downloads.RELATIVE_PATH,Environment.DIRECTORY_DOWNLOADS);
// Insert into the database
ContentResolver database = context.getContentResolver();
uri.setValue(database.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI,contentValues));
}
我做错了什么?如何以正确的方式执行此过程?
解决方法
1.使用 ContentValues,您只在数据库(内部)中注册,但不会插入下载的对象本身。配置内容值后,使用位图压缩来保存对象本身。 uri = database.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI,contentValues)),uri = 你的文件uri 2.只用 contentValues.put(MediaStore.DownloadColumns.IS_PENDING,1) contentValues.put(MediaStore.Downloads.TITLE,fileName);没有 contentValues.put(MediaStore.DownloadColumns.DISPLAY_NAME,fileName)。 (使用位图压缩保存后) contentValues.clear() contentValues.put(MediaStore.DownloadColumns.IS_PENDING,0) contentValues.put(MediaStore.Downloads.DISPLAY_NAME,fileName + ".ext");然后 uri.update(insert,values,null,null)