如何在Android R中使用MediaStore下载图像/视频文件?

3

在Android Q中,getExternalStoragePublicDirectory已被弃用,并建议使用MediaStore API。

这是我的图像URL:https://cdn.pixabay.com/photo/2020/04/21/06/41/bulldog-5071407_1280.jpg

我想下载此图像文件,并根据MediaStore API将其保存到共享文件夹,即Downloads或Pictures文件夹。

以下是样本代码:

ContentResolver resolver = context.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);

Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); 

注意:compileSdkVersion 30 我想要一个示例,演示如何在Android R中下载图像/视频文件并将其保存到下载文件夹位置,同时利用MediaStore。

现在的问题是如何下载图像/视频文件并保存到URI位置。媒体存储无法帮助您进行下载,因此我不理解您帖子的主题。 - blackapps
来自媒体存储或文件提供程序的URI。这都一样。显然,您想要下载到URI。那么,您可以像Android R之前一样做到这一点。 - blackapps
@blackapps 怎样下载文件?并借助 MediaStore 把它保存到下载文件夹中。 - Kanaiya Katarmal
1
如前所述:媒体商店无法帮助您进行下载。 - blackapps
@blackapps,你能给我提供一个支持在Android R上下载文件的示例吗? - Kanaiya Katarmal
显示剩余2条评论
2个回答

0

Kanaiya,我回答了有关MediaStore的改进问题MediaStore.Images.Media.insertImage已弃用

我使用了workManager和viewModel,不确定是否适用于您的用例,我在API 26和API 30上测试了我的答案。

我的工作示例只是一个2018年的workmanager codelab,我对其进行了微小的更改以删除一个过时的api调用,感谢原始想法commonsware


在你的情况下,因为你要保存一个JPG格式,所以在压缩时你可以/应该使用小于100的值。 - Manav Brar

0

为了在Android 10上保存它。然后在调用插入方法后,您将获得URI,然后调用

os = getContentResolver().openOutputStream(uri);

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();

在Android 10中,仅调用insert方法是不够的。

你的代码应该像这样:

ContentResolver resolver = context.getContentResolver();
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.MediaColumns.DISPLAY_NAME, name);
contentValues.put(MediaStore.MediaColumns.MIME_TYPE, mimeType);
contentValues.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS);

Uri uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues); 

OutputStream os = getContentResolver().openOutputStream(uri);

Bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
os.close();


如果是视频文件,应该怎么办? - MD Tayobur Rahman

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