flutter - 获取外部存储的权限(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" />
到清单文件并重建整个项目。我还能尝试什么?
此外,仅列出外部存储中的所有文件也会产生相同的权限错误。
希望听到!
解决方案
除了需要添加WRITE_EXTERNAL_STORAGE
到READ_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)
}
笔记:
SimplePermissions.requestPermission
第一次运行时,app会弹出一个窗口,你必须点击ALLOW
:
给予许可。
- 如果您已经单击
DENY
,则卸载调试应用程序并重新调试以安装并修复此问题 -> 触发弹出窗口并让您有机会单击ALLOW
。
推荐阅读
- python - 是否可以在 Python 中有单独的 lib 和 src 目录?
- sql - SQL Server 中多列的条件批量更新
- scrapy - 蜘蛛不会停止
- python-3.x - Python中的while循环程序用于存储可被10整除的值
- android - Lambda 不适用于 Kotlin 进行多线程操作
- spring - Spring - 通过 HttpSecurity 禁止除特定角色之外的所有端点
- javascript - Javascript 对象构造函数覆盖以停止调用某些方法
- swift - ARKit - 在 Motion Capture RealityKit 中复制机器人角色
- javascript - UnhandledPromiseRejectionWarning:错误:评估失败
- android - 绑定服务时超时执行服务的 Android ANR