Luk*_*ner 6 android dart flutter
我编写了一个插件,用于通过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();
}
}
Run Code Online (Sandbox Code Playgroud)
返回的路径是正确的storage/emulated/0。但是现在,如果我尝试迭代抛出目录,我将获得一个权限被拒绝。
错误日志
[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)
Run Code Online (Sandbox Code Playgroud)
主镖
path = await Userdatadirectory.getUserDataDirectory;
var dir = new Directory(path);
List contents = dir.listSync();
for (var fileOrDir in contents) {
print(fileOrDir.path);
}
Run Code Online (Sandbox Code Playgroud)
我example/android/app/src/AndroidManifest.xml包含以下附加要求:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
Run Code Online (Sandbox Code Playgroud)
这里有什么问题?
如果您使用的是 Android Q,它就会发生| 10.
它将通过在清单文件中添加以下内容来解决。
<application
android:requestLegacyExternalStorage="true"
Run Code Online (Sandbox Code Playgroud)
您可以使用这两个包中的任何一个来请求设备权限:https://pub.dartlang.org/packages/simple_permissions或https://pub.dartlang.org/packages/permission。它们有简单的 API 和全面的示例。
| 归档时间: |
|
| 查看次数: |
2588 次 |
| 最近记录: |