【问题标题】:How to save a file to external storage in the media directory in 2020?2020年如何将文件保存到媒体目录中的外部存储?
【发布时间】:2020-06-24 15:55:58
【问题描述】:

我有一个问题。

如何将文件从网络保存到 android 设备的外部存储,使用 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 卡上获取音乐文件夹(插入时)。

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

【问题讨论】:

  • 您应该向 MediaStore 询问合适的 uri。打开该 uri 的流,然后将字节写入文件。
  • MediaStore 实际上仅在 Q-Level 可用。你知道另一种选择吗?
  • 没有。媒体商店无处不在。而低于 Q 则没有这种弃用。你在说什么?
  • 抱歉,MediaStore 仅在 Q 级不可用。但是我如何准确地获得 SD-Card-Music-Folder?
  • Micro SD 卡在 Q 以下是只读的。因此,如果上面有 Music 文件夹,则无法写入。有关使用 MediaStore 的不错示例,请阅读标记为 mediastore 的 stackoverflow 页面。

标签: java android download storage external


【解决方案1】:

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

<application
android:requestLegacyExternalStorage="true"

【讨论】:

    猜你喜欢
    • 2021-10-09
    • 1970-01-01
    • 2011-12-14
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2021-01-06
    相关资源
    最近更新 更多