获得外部存储的权限(file_provider插件)

时间:2018-05-28 08:04:58

标签: flutter

我在使用颤动的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" />
清单文件并重建整个项目。我还能尝试什么?

此外,只列出外部存储中的所有文件会产生相同的权限错误。

希望听到!

5 个答案:

答案 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应用,

然后重新运行。

注意:确保安装后,从应用设置中允许存储权限

经过数小时的努力,它对我有用(我不知道为什么该解决方案有效)