我在使用颤动的Android设备上获取外部存储的权限时遇到了一些问题。
当我尝试在外部存储中创建目录时,我收到此错误(我已经为此示例更改了目录。在我自己的项目中,目录名称不同):
I/flutter (12727): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter (12727): The following FileSystemException was thrown while handling a gesture:
I/flutter (12727): Creation failed, path = '/storage/emulated/0/com.domain.bundle' (OS Error: Permission denied,
I/flutter (12727): errno = 13)
I/flutter (12727):
我已经添加了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
清单文件并重建整个项目。我还能尝试什么?
此外,只列出外部存储中的所有文件会产生相同的权限错误。
希望听到!
答案 0 :(得分:5)
在Android Q中,可以通过在AndroidManifest文件中添加以下几行来解决此错误:
<application
android:requestLegacyExternalStorage="true"
答案 1 :(得分:1)
对于Android 6.0及更高版本,如果应用程序具有需要危险权限(list of dangerous permissions)的功能,则必须明确询问权限(查看图像here)
您向Manifest文件添加了权限,这还不够,还需要为您的权限实现运行时请求。
我查看了Flutter存储库,看来他们正在为此设计一个插件。这是their discussion。
答案 2 :(得分:1)
您可以使用simple_permissions包
PermissionStatus res = await SimplePermissions.requestPermission(Permission. WriteExternalStorage);
答案 3 :(得分:0)
请使用packagePermission_handler请求权限。
https://pub.dev/packages/permission_handler
https://github.com/BaseflowIT/flutter-permission-handler
library(dplyr)
mtcars %>%
group_by(cyl) %>%
dplyr::mutate(meanweight = mean(wt))
和仿真器的结果如下:
import 'package:permission_handler/permission_handler.dart';
...
void _showFilesinDir({Directory dir}) {
dir.list(recursive: false, followLinks: false)
.listen((FileSystemEntity entity) {
print(entity.path);
});
}
...
onTap: () async{
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.storage]);
var systemTempDir = Directory.systemTemp;
_showFilesinDir(dir: systemTempDir);
final myDir = new Directory('/sdcard');
myDir.exists().then((isThere) {
isThere ? _showFilesinDir(dir: myDir) : print('non-existent');
});
}
...
答案 4 :(得分:0)
可能的解决方案:
即使添加了权限,我也遇到了相同的错误(在Android 10设备中)
然后,我从设备上手动卸载 Flutter应用,
然后重新运行。
注意:确保安装后,从应用设置中允许存储权限。
经过数小时的努力,它对我有用(我不知道为什么该解决方案有效)