【问题标题】:How to download image/video file in Android R with help of MediaStore?如何借助 MediaStore 在 Android R 中下载图像/视频文件?
【发布时间】:2021-04-19 14:42:40
【问题描述】:

由于 getExternalStoragePublicDirectory 在 Android Q 中已被弃用,建议使用 MediaStore API

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

我想下载此图像文件并希望根据MediaStore API 保存共享文件夹,即下载或图片文件夹

下面是示例代码

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 将其保存到下载文件夹位置的示例。

【问题讨论】:

  • Now question is How to download Image/Video file and save into uri location.媒体商店不能帮你下载所以我不明白你的帖子的主题。
  • 来自媒体存储或文件提供程序的 uri。这都一样。显然你想下载到一个uri。好吧,您可以像之前的 Android R 一样做到这一点。
  • @blackapps 如何下载文件?并在 MediaStore 的帮助下保存到 Downloads 文件夹
  • 如前所述:媒体商店无法帮助您下载。
  • @blackapps 你能给我一份在 android R 中支持的 doenload 文件示例

标签: android mediastore


【解决方案1】:

为了在android 10上保存。然后在调用insert方法后你会得到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();

【讨论】:

  • 如果是视频文件怎么办?
【解决方案2】:

Kanaiya 我回答了 MediaStore 的改进答案 MediaStore.Images.Media.insertImage deprecated

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

我的工作 sample 只是一个 2018 年的 workmanager 代码实验室,我对其进行了一些小改动以删除折旧的 api 调用,感谢 commonsware 的原始想法

【讨论】:

  • 在您的情况下,当您保存 JPG 时,压缩时您可以/应该使用小于 100 的值
猜你喜欢
  • 2016-08-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-10
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多