Flutter[Android]:无法发布具有管理外部存储权限的应用程序
我们需要允许用户将文件存储在外部存储中,为此,我们在应用程序中使用MANAGE_EXTERNAL_STORAGE
权限。
理想情况下,对于 Android SDK 版本 30 及更高版本,我们使用 Permission.manageExternalStorage
,对于 Android SDK 版本低于 30 的版本,我们使用 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 控制台拒绝了该应用程序,并出现以下拒绝(我们还提交了原因以及管理存储权限)。
We need to allow users to store files in the external storage and for the same, we use MANAGE_EXTERNAL_STORAGE
permission in our application.
Ideally for the android SDK version 30 and above we are using Permission.manageExternalStorage
and using Permission.storage
for android SDK versions lower than 30 as shown in the below code
// 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;
}
}
With the above implementation, everything worked fine while the development and internal release but the Google play console reject the application with the below rejections(Also we have submitted the reason as well for manage_storage permission).
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找到了此问题的解决方案,
在低于 11 或高于 11 的 Android 级别中进行了正确测试。
首先请检查 onpressd 按钮上的 Android 设备是否像这样
=>;然后是方法
I found solution for this issue
properly tested in android level less then 11 or greater then 11
First please check this is that android device on your onpressd button like this
=> and then method
我在我的项目中找到并应用了以下解决方案来解决上述问题。
I found and applied the below solution for the above issue in my project.
如果不是需要访问设备外部存储的应用程序(例如Antivirus应用程序),并且您想在flutter中下载文件,则可以只使用软件包 path_provider 在安装过程中使用Android使用您的应用特定目录提供商。使用它以下载文件
,或者您可以使用 dio package package downlaod downlaod它管理的文件管理您需要创建的一切盒子里的文件为您
If is not an app that needs the to access the device external storage (e.g antivirus app) and you want to download a file in Flutter, you might just use the package path_provider to use your app specific directory provider by android during installation. use this to download file
or you can use dio package to downlaod the file it manages everything you need to create the file out of the box for you
您不需要该权限即可在公共目录(例如下载、文档、DCIM、图片等)中创建自己的子目录。
此外,您不需要该权限即可在这些目录和子目录中创建文件。
You do not need that permission to create your own subdirs in public directories like Download, Documents, DCIM, Pictures and so.
Also you do not need that permission to create files in those directories and subdirs.