Android 11 引入了Scoped Storage,限制了应用程序对设备存储的访问权限。因此,访问下载文件时需要使用特殊的访问方式。以下是一个示例代码,用于在 Android 11 上从下载文件夹中检索文件列表:
private List getDownloadedFiles() {
List downloadedFiles = new ArrayList<>();
// Get downloads folder URI using DownloadManager
String downloadsDirectoryPath = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
Uri downloadsUri = Uri.parse(downloadsDirectoryPath);
// Query downloads folder with proper permission
Cursor cursor = getContentResolver().query(downloadsUri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int fileNameIndex = cursor.getColumnIndex(DownloadManager.COLUMN_TITLE);
do {
String fileName = cursor.getString(fileNameIndex);
File downloadedFile = new File(downloadsDirectoryPath + File.separator + fileName);
downloadedFiles.add(downloadedFile);
} while (cursor.moveToNext());
cursor.close();
}
return downloadedFiles;
}
这段代码使用了DownloadManager.COLUMN_TITLE来获取文件名,但是您可以使用其他列来获取URI、大小、MIME类型等。 请注意,此示例代码需要访问设备存储的权限。 您需要在AndroidManifest.xml文件中添加以下权限标签: