对于Android Q,如何将多个文件复制到Shared Collections Downloads(适用于范围存储)?

时间:2019-05-01 19:46:47

标签: android

对于即将到来的Android Q Scoped Storage,我想知道我们如何执行往返文件复制?


Android Q之前

我有几个图像文件,它们位于以下位置

Application.instance().getExternalFilesDir(null) + "/a.png";
Application.instance().getExternalFilesDir(null) + "/b.png";
Application.instance().getExternalFilesDir(null) + "/c.png";

为确保即使卸载该应用程序也保留这些文件,该应用程序会将图像文件复制到以下位置

Environment.getExternalStorageDirectory() + "/com.yocto.wenote/backup/a.png";
Environment.getExternalStorageDirectory() + "/com.yocto.wenote/backup/b.png";
Environment.getExternalStorageDirectory() + "/com.yocto.wenote/backup/c.png";

一个简单的java.io.File复制操作就能完成此操作。

public static boolean copy(File src, File dst) {

    InputStream in = null;
    OutputStream out = null;
    try {
        in = new FileInputStream(src);
        out = new FileOutputStream(dst);

        // Transfer bytes from in to out
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }

        return true;
    } catch (IOException e) {
        Log.e(TAG, "", e);
    } finally {
        close(out);
        close(in);
    }

    return false;
}

对于Android Q,范围存储

java.io.File在Android Q(范围存储)下不再可用。

根据https://developer.android.com/preview/privacy/scoped-storage

  

如果您的应用创建了属于该用户的文件,并且该用户   预计将在您的应用卸载时保留,然后保存   进入一种常见的媒体收藏,也称为共享   集合。共享的收藏集包括:照片和视频,音乐和   下载。

我们希望将3个图像文件复制到“ 下载”共享集合中。但是,我们很难获得具体的代码示例,说明如何实现?


对于Android Q,范围存储,我们如何执行将多个文件复制到共享集合下载的操作?

1 个答案:

答案 0 :(得分:1)

致电Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs()

现在,您可以使用标准File API来读取和写入仅限于应用程序文件的downloads文件夹的沙盒视图。如果您打开默认文件应用程序并导航至下载,您将看到所有应用程序(包括您)的所有下载。 (至少在模拟器上)