在Android Q及更高版本中,可以使用MediaStore
API将有内容的私有文件夹复制到公共目录。下面是完善且全面的答案:
在Android Q及更高版本中,将有内容的私有文件夹复制到公共目录可以通过以下步骤实现:
READ_EXTERNAL_STORAGE
和WRITE_EXTERNAL_STORAGE
权限。MediaStore
API查询私有文件夹中的文件。可以使用ContentResolver
的query()
方法来实现。例如,如果你的私有文件夹路径是/storage/emulated/0/Android/data/com.example.app/files/
,你可以使用以下代码查询文件:Uri privateFolderUri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
String[] projection = {MediaStore.Files.FileColumns._ID, MediaStore.Files.FileColumns.DATA};
String selection = MediaStore.Files.FileColumns.DATA + " LIKE ?";
String[] selectionArgs = new String[]{"/storage/emulated/0/Android/data/com.example.app/files/%"};
String sortOrder = null;
Cursor cursor = getContentResolver().query(privateFolderUri, projection, selection, selectionArgs, sortOrder);
Cursor
,并将每个文件复制到公共目录。可以使用ContentResolver
的openOutputStream()
方法获取公共目录中的文件输出流,然后使用InputStream
和OutputStream
将文件内容复制过去。以下是一个示例代码:while (cursor.moveToNext()) {
long fileId = cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID));
String filePath = cursor.getString(cursor.getColumnIndex(MediaStore.Files.FileColumns.DATA));
try {
InputStream inputStream = new FileInputStream(filePath);
OutputStream outputStream = getContentResolver().openOutputStream(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
inputStream.close();
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Cursor
。需要注意的是,上述代码仅适用于将私有文件夹中的文件复制到公共图片目录。如果你想复制到其他类型的公共目录,例如音频或视频目录,可以将MediaStore.Images.Media.EXTERNAL_CONTENT_URI
替换为相应的URI。
推荐的腾讯云相关产品:腾讯云对象存储(COS)。
腾讯云对象存储(COS)是一种安全、高可靠、低成本的云存储服务,适用于存储和处理各种类型的文件,包括图片、音频、视频、文档等。它提供了简单易用的API和丰富的功能,可以帮助开发者轻松实现文件的上传、下载、管理和分享。
产品介绍链接地址:腾讯云对象存储(COS)
领取专属 10元无门槛券
手把手带您无忧上云