如何在2020年将文件保存到媒体目录中的外部存储?



我有一个问题。

如何将文件从网络保存到安卓设备的外部存储,使用Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)被贬低了?

我的代码:

private void download(Context mContext) throws IOException {
String requestUrl = "http://someresource/..."
URL url = new URL(requestUrl);
InputStream in = url.openStream();
mContext.getFilesDir();
URI uri = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_MUSIC).toURI();
Files.copy(in, Paths.get(uri.getPath() + "/_test.mp3"), StandardCopyOption.REPLACE_EXISTING);
in.close();
System.out.println("finished!");
}

我收到错误W/System.err: java.nio.file.AccessDeniedException: /storage/emulated/0/Music/_test.mp3

我也读了这篇文章 https://developer.android.com/training/data-storage/shared/media#java 但我想这更像是篡改现有媒体文件的指南,例如搜索或编辑文件标签等,而不仅仅是将文件保存在媒体目录中。

更新: 我的应用需要完成两项任务。我想将mp3文件保存到上述目录,并从该目录中读取文件。

下面问:使用Environment.getExternalStorageDirectory().getPath()+"/Music";会返回Android设备内置闪存上的音乐文件夹。 以这种方式,我想知道如何在Android设备的SD卡上获取音乐文件夹(当它插入时(。

由于 Q:上述方法返回一个目录,应用程序不再可以直接访问该目录。我想完成的任务与上面提到的任务相同。 正如@blackapps所假设的那样,在Q中使用MediaStore类是可取的。但是我究竟该怎么做呢?

对于 android 10 和 11,请将此行添加到 android 清单文件中的<application>元素中。 希望它会起作用:

<application
android:requestLegacyExternalStorage="true"

最新更新