我在网上搜寻了一个解决方案,最后我不得不抓住最后一次机会。我知道关于这个问题有很多争论,但如果我在这里,那是因为我还没有答案。问题很清楚,但大多数建议的解决方案都不起作用。
<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="android.permission.READ_INTERNAL_STORAGE" />
android:requestLegacyExternalStorage="true">
我已经更改了版本
flutter.minSdkVersion=21
flutter.targetSdkVersion=29
flutter.compileSdkVersion=29
这是代码。
bool loading = false;
List<String> _exPath = [];
List<File> _exfilePath = [];
bool permissionGranted = false;
@override
void initState() {
_getStoragePermission();
refresh();
super.initState();
}
refresh() {
loading = true;
getPath();
loading = false;
}
Future<void> getPath() async {
List<String> paths;
List<File> filePath = [];
List<FileSystemEntity> filesys = [];
// getExternalStorageDirectories() will return list containing
internal storage directory path
paths = await
ExternalPath.getExternalStorageDirectories();
for (String fileString in paths) {
Directory dir = Directory(fileString);
List<FileSystemEntity> files = dir.listSync(recursive: true);
filesys = files;
}
for (FileSystemEntity file in filesys) {
FileStat f = file.statSync();
if (f.type == FileSystemEntityType.file &&
file.path.contains('.pdf')) {
File g = File(file.path);
paths.add(basename(file.path));
filePath.add(g);
}
}
setState(() {
_exPath = paths;
_exfilePath = filePath;
});
}
Future _getStoragePermission() async {
if (await Permission.storage.request().isGranted) {
setState(() {
permissionGranted = true;
});
} else if (await
Permission.storage.request().isPermanentlyDenied) {
await openAppSettings();
} else if (await Permission.storage.request().isDenied) {
setState(() {
permissionGranted = false;
});
}
}
@override
Widget build(BuildContext context) {
print(_exfilePath);
我无法访问外部存储 [/storage/B3AE-4D28] 但我可以访问 [/storage/emulated/0]