我们需要允许用户在外部存储器中存储文件,为此,我们在应用程序中使用MANAGE_EXTERNAL_STORAGE
权限。
理想情况下,对于Android SDK版本30及以上,我们使用Permission.manageExternalStorage
,对于低于30的Android SDK版本使用Permission.storage
,如下面的代码所示
// This func is added to access scope storage to export csv files
static Future<bool> externalStoragePermission(BuildContext context) async {
final androidVersion = await DeviceInfoPlugin().androidInfo;
if ((androidVersion.version.sdkInt ?? 0) >= 30) {
return await checkManageStoragePermission(context);
} else {
return await checkStoragePermission(context);
}
}
static Future<bool> checkManageStoragePermission(BuildContext context) async {
return (await Permission.manageExternalStorage.isGranted ||
await Permission.manageExternalStorage.request().isGranted);
}
static Future<bool> checkStoragePermission(BuildContext context,
{String? storageTitle, String? storageSubMessage}) async {
if (await Permission.storage.isGranted ||
await Permission.storage.request().isGranted) {
return true;
} else {
openBottomSheet(
title: storageTitle ?? Str.of(context).storagePermissionRequired,
message: storageSubMessage ?? Str.of(context).storageSubMessage,
).show(context);
return false;
}
}
字符串
通过上述实现,在开发和内部发布时一切正常,但Google Play控制台拒绝了应用程序,并拒绝了以下拒绝(我们还提交了manage_storage权限的原因)。
的数据
4条答案
按热度按时间balp4ylt1#
我找到了解决这个问题的方法
在Android级别下正确测试小于11或大于11
首先请检查这是你的onpressd按钮上的android设备像这样
字符串
=> then方法
型
yqkkidmi2#
我在我的项目中发现并应用了上述问题的以下解决方案。
1.我们必须使用SAF(Storage Access Framework)来代表存储权限shared_storage,这将允许我们授予共享存储中特定目录的权限,我们可以将文件存储在那里。我还添加了下面的代码示例。
字符串
cbjzeqam3#
如果不是一个需要访问设备外部存储的应用程序(例如防病毒应用程序),并且您想在Flutter中下载文件,您可以在安装过程中使用path_provider包通过Android使用您的应用程序特定的目录提供程序。
字符串
或者你可以使用dio包来下载文件,它管理你创建文件所需的一切。
型
46scxncf4#
我们需要允许用户在外部存储器中存储文件,为此,我们在应用程序中使用MANAGE_EXTERNAL_REPORT权限。
您不需要该权限就可以在公共目录(如Download、Documents、DCIM、Pictures等)中创建子目录。
在这些目录和子目录中创建文件也不需要该权限。