对于即将到来的Android Q Scoped Storage,我想知道我们如何执行往返文件复制?
我有几个图像文件,它们位于以下位置
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;
}
java.io.File
在Android Q(范围存储)下不再可用。
根据https://developer.android.com/preview/privacy/scoped-storage
如果您的应用创建了属于该用户的文件,并且该用户 预计将在您的应用卸载时保留,然后保存 进入一种常见的媒体收藏,也称为共享 集合。共享的收藏集包括:照片和视频,音乐和 下载。
我们希望将3个图像文件复制到“ 下载”共享集合中。但是,我们很难获得具体的代码示例,说明如何实现?
对于Android Q,范围存储,我们如何执行将多个文件复制到共享集合下载的操作?
答案 0 :(得分:1)
致电Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs()
现在,您可以使用标准File
API来读取和写入仅限于应用程序文件的downloads文件夹的沙盒视图。如果您打开默认文件应用程序并导航至下载,您将看到所有应用程序(包括您)的所有下载。 (至少在模拟器上)