【发布时间】:2021-01-26 18:08:38
【问题描述】:
我写了一个插件来通过 Dart 访问 Android 上的 ExternalStorageDirectory。
插件的android特定代码:
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("getUserDataDirectory")) {
String path = Environment.getExternalStorageDirectory().getAbsolutePath();
result.success(path);
} else {
result.notImplemented();
}
}
返回的路径是正确的storage/emulated/0。但是现在如果我尝试迭代抛出目录,我会得到一个 Permission denied。
错误日志
[ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception:
E/flutter ( 3381): FileSystemException: Directory listing failed, path = '/storage/emulated/0/' (OS Error: Permission denied, errno = 13)
E/flutter ( 3381): #0 _Directory._fillWithDirectoryListing (dart:io-patch/directory_patch.dart:32)
E/flutter ( 3381): #1 _Directory.listSync (directory_impl.dart:214)
E/flutter ( 3381): #2 _MyAppState.initPathRequest (/data/user/0/com.yourcompany.userdatadirectoryexample/cache/exampleIAKNFP/example/lib/main.dart:34:25)
main.dart
path = await Userdatadirectory.getUserDataDirectory;
var dir = new Directory(path);
List contents = dir.listSync();
for (var fileOrDir in contents) {
print(fileOrDir.path);
}
我的example/android/app/src/AndroidManifest.xml 包含这些额外的权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
这里有什么问题?
【问题讨论】:
-
好的,但现在我有一个问题,我不能访问活动,所以我不能调用 requestPermission()。那么是否可以在 Flutter 插件项目中获取 Context 或 Activity 呢?以及如何?
-
我正在尝试访问 /storage/emulated/ 目录但收到错误“未处理的异常:FileSystemException:目录列表失败,路径 = '/storage/emulated/'(操作系统错误:权限被拒绝,errno = 13)" 虽然我已授予 WRITE_EXTERNAL_STORAGE 和 READ_EXTERNAL_STORAGE 权限。任何建议。谢谢。