gpt4 book ai didi

android - 即使授予存储权限也无法在Samsung手机上创建目录

转载 作者:行者123 更新时间:2023-12-03 04:40:02 25 4
gpt4 key购买 nike

在启动应用程序时,我在存储中创建了一个文件夹。为此,我要求initState()内的权限。只有完成后,目录检查才能继续进行。

@override
void initState(){
super.initState();
easyDir = Directory(widget.folderPath);
getPermissionStatus().whenComplete(() {
setState(() {
//never call async operations in setState, do it in a function call.
directoryCheck();
});
});
}
folderPathpermission_handler包生成。我的手机是 /storage/emulated/0/Documents/easyFolder
  //check if directory exists, create if not.
Future<void> directoryCheck() async {
// using awaits fixed my problem of setstate being called before
// directory was created.. and calling setState at end
exists = await easyDir.exists();
if (!exists){
await new Directory(widget.folderPath).create(recursive: true);
exists = true;
}
setState(() {

});

}

Future<void> getPermissionStatus() async {
_status = await Permission.storage.status;
// if permission is not granted yet, request it and update _status
if (_status != PermissionStatus.granted){
await Permission.storage.request();
_status = await Permission.storage.status;
}
}
这在模拟器上按预期工作。该应用程序在启动时会请求许可,等待其完成,并在允许时创建目录。
但是,当安装在我的三星手机甚至是 friend 手机(三星)上时,即使授予了权限,也会由于拒绝权限而无法创建该文件夹。
这是我在三星手机上收到的错误:
E/flutter (23275): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: FileSystemException: Creation failed, path = '/storage/emulated/0/Documents' (OS Error: Permission denied, errno = 13)
我显然在启动应用程序时获得了许可。更重要的是,当我进入应用程序的appinfo时,它表明 Storage权限已被授予。
我尝试在华为和小米手机上安装此程序,并且都按预期工作。
我在这里做错了什么?
这是我的 AndroindManifest中的权限行
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
如果有帮助,这里是错误堆栈:
E/flutter (23275): #0      _Directory.create.<anonymous closure> (dart:io/directory_impl.dart:124:11)
E/flutter (23275): #1 _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter (23275): #2 _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (23275): #3 _FutureListener.handleValue (dart:async/future_impl.dart:141:18)
E/flutter (23275): #4 Future._propagateToListeners.handleValueCallback (dart:async/future_impl.dart:682:45)
E/flutter (23275): #5 Future._propagateToListeners (dart:async/future_impl.dart:711:32)
E/flutter (23275): #6 Future._completeWithValue (dart:async/future_impl.dart:526:5)
E/flutter (23275): #7 Future._asyncComplete.<anonymous closure> (dart:async/future_impl.dart:556:7)
E/flutter (23275): #8 _rootRun (dart:async/zone.dart:1184:13)
E/flutter (23275): #9 _CustomZone.run (dart:async/zone.dart:1077:19)
E/flutter (23275): #10 _CustomZone.runGuarded (dart:async/zone.dart:979:7)
E/flutter (23275): #11 _CustomZone.bindCallbackGuarded.<anonymous closure> (dart:async/zone.dart:1019:23)
E/flutter (23275): #12 _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter (23275): #13 _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)
E/flutter (23275):

最佳答案

我觉得奇怪的是,该代码无法在Android 11中正常运行,但不能在Android 10中正常运行,因为新的作用域存储会导致Android 10 (Q)及更高版本的写入权限失败
现在,请在 list 中尝试执行此操作,以选择退出Android 10中的范围存储(在Android 11中不执行任何操作),

<manifest ... >
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>

Caution: After you update your app to target Android 11 (API level30), the system ignores the requestLegacyExternalStorage attributewhen your app is running on Android 11 devices, so your app must beready to support scoped storage and to migrate app data for users onthose devices.


More info about Scoped Storage here
现在,一些问题可以帮助您解决此问题:

the folderPath is produced by the permission_handler


我不记得在要求许可权时要返回一个路径path_handler,您能详细说明一下如何获得 widget.folderPath吗?

The Emulator is running Android version 11. While my Samsung phone ison Android version 10


华为和小米设备怎么样,它们也都运行Android 10吗?
您在gradle中的 compileSdkVersion / targetSdkVersion或AndroidManifest中的 targetSdk是什么?

关于android - 即使授予存储权限也无法在Samsung手机上创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63404356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com