Flutter 如何处理;“拒绝许可”;颤振中的例外?
我正试图通过我的flatter应用程序获取android设备上所有文件和目录的名称/路径 以下是用于获取所需数据的代码:Flutter 如何处理;“拒绝许可”;颤振中的例外?,flutter,dart,Flutter,Dart,我正试图通过我的flatter应用程序获取android设备上所有文件和目录的名称/路径 以下是用于获取所需数据的代码: Directory(_storageInstance.rootDirectory).list(recursive: true).listen((event) { _storageInstance.searchList.add(SearchEntity(path: event.path,type: event.runtimeType.toString() =
Directory(_storageInstance.rootDirectory).list(recursive: true).listen((event) {
_storageInstance.searchList.add(SearchEntity(path: event.path,type: event.runtimeType.toString() == "_Directory" ? EntityType.DIRECTORY : EntityType.FILE));
});
现在我面临的问题是,具有API30或更高版本的设备不允许访问某些特定目录,如“Android”目录中的“data”和“obb”目录。
因此,在上面的代码中,每当my Directory().list().listen()流接收到这些目录时,都会引发以下异常:
E/flutter (28808): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: FileSystemException: Directory listing failed, path = '/storage/emulated/0/Android/data' (OS Error: Permission denied, errno = 13)
E/flutter (28808):
E/flutter (28808): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: FileSystemException: Directory listing failed, path = '/storage/emulated/0/Android/obb' (OS Error: Permission denied, errno = 13)
我试着像这样添加try catch:
Directory(_storageInstance.rootDirectory).list(recursive: true).listen((event) {
try{
_storageInstance.searchList.add(SearchEntity(path: event.path,type:
event.runtimeType.toString() == "_Directory" ? EntityType.DIRECTORY : EntityType.FILE));
}
catch(e){
print("Exception Caught");
}
});
但它仍然无法处理异常,并抛出与上面相同的异常。
通常是一个简单的试抓工作。。。。。。。也许我在这个场景中正确地使用了它
在这种情况下,如何正确处理异常
提前感谢您的回答:)
更新:
我尝试在Android Manifest.xml中添加权限。但它仍然抛出同样的例外
下面是应用程序的设置选项卡:
在
mainifest
标记内添加此行:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
如果还不清楚的话。下面是我在debug
目录下的项目中的AndroidMainifest.xml
示例
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.do_app">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>
*注意:-进行这些更改后,您必须从头开始运行。您是否通过添加
androidmainifest.xml
获得了许可?@BiploveLamichhane否您能帮我吗?我尝试了上述步骤。。。。。。。。还重新安装了应用程序并进行了清理…但仍然给出了相同的例外您添加到调试版本和主版本?是的,我在两个清单中添加了所有这些权限:您可以通过进入应用程序中的设置进行检查,并检查我们是否成功添加了权限。我已在我的应用程序中添加了设置的屏幕截图问题。。。。。。请看一看。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.do_app">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
</manifest>