android11以上遍历文件
时间: 2023-07-28 13:10:15 浏览: 93
Android遍历所有文件夹和子目录搜索文件
从 Android 11 开始,应用程序需要获取特殊权限才能访问外部存储设备上的文件,因此遍历文件的方式也有所改变。
您可以使用以下代码来遍历 Android 11 及以上版本设备上的文件:
```java
// 在 AndroidManifest.xml 中添加以下权限声明:
// <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
public void traverseFiles(Context context) {
if (Environment.isExternalStorageManager()) {
ContentResolver resolver = context.getContentResolver();
Uri uri = MediaStore.Files.getContentUri(MediaStore.VOLUME_EXTERNAL);
String[] projection = {MediaStore.Files.FileColumns.DATA};
String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "="
+ MediaStore.Files.FileColumns.MEDIA_TYPE_NONE;
Cursor cursor = resolver.query(uri, projection, selection, null, null);
if (cursor != null) {
while (cursor.moveToNext()) {
String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA));
// 处理文件
}
cursor.close();
}
} else {
// 请求 MANAGE_EXTERNAL_STORAGE 权限
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
}
}
```
在 Android 11 及以上版本设备上,您需要在 AndroidManifest.xml 中添加 MANAGE_EXTERNAL_STORAGE 权限声明。
当应用程序拥有 MANAGE_EXTERNAL_STORAGE 权限时,您可以使用 `MediaStore` 类提供的 API 来查询外部存储设备上的文件信息,并对每个文件进行处理。如果应用程序没有 MANAGE_EXTERNAL_STORAGE 权限,您可以将用户重定向到系统设置页面,请求授权。
阅读全文