在 Android 10 / API 29 中,可以使用 Scoped Storage 来管理外部存储空间的访问。对于公共文件夹,可以使用 MediaStore API 进行访问。
以下是一个示例代码,演示如何使用 MediaStore API 访问公共图片文件夹中的所有图片:
// 查询公共图片文件夹中的所有图片
String[] projection = new String[]{
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media.DATE_ADDED
};
String selection = null;
String[] selectionArgs = null;
String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC";
Cursor cursor = getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
selection,
selectionArgs,
sortOrder
);
if (cursor != null) {
while (cursor.moveToNext()) {
long id = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media._ID));
String name = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME));
long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.SIZE));
long dateAdded = cursor.getLong(cursor.getColumnIndex(MediaStore.Images.Media.DATE_ADDED));
// 在这里对每个文件进行操作
}
cursor.close();
}
需要注意的是,要访问公共文件夹,需要在 AndroidManifest.xml 文件中声明适当的权限:
除此之外,对于私有文件夹,可以使用 getExternalFilesDir() 和 getExternalCacheDir() 方法来获取对应的目录,在这些目录中创建的文件只能被应用自身访问。