首页 > 解决方案 > 获取外部存储的权限(file_provider 插件)

问题描述

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

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

希望听到!

标签: flutter

解决方案


除了需要添加WRITE_EXTERNAL_STORAGEREAD_EXTERNAL_STORAGE您的android/app/src/main/AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xxx.yyy">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
...
</manifest>

您还需要Runtime Request Permission,使用simple_permissions包:

import 'package:simple_permissions/simple_permissions.dart';

PermissionStatus permissionResult = await SimplePermissions.requestPermission(Permission. WriteExternalStorage);
if (permissionResult == PermissionStatus.authorized){
  // code of read or write file in external storage (SD card)
}

笔记:

  1. SimplePermissions.requestPermission一次运行时,app会弹出一个窗口,你必须点击ALLOW

给予许可。

  1. 如果您已经单击DENY,则卸载调试应用程序并重新调试以安装并修复此问题 -> 触发弹出窗口并让您有机会单击ALLOW

推荐阅读