[英]Flutter Android 11 permissions like WhatsApp
我正在尝试构建一个在 Android 11 上运行并下载文件的 Flutter 应用程序。 我曾经通过管理外部存储权限来实现这一点,但是当应用程序请求权限时,它会直接进入设置,而不是在应用程序内请求允许或拒绝。
例如,WhatsApp 将数据存储在android/media文件夹中,但它直接在应用程序内请求权限,而不是转到设置页面。 请参考以下图片:
我的权限处理代码
Future<bool> requestPermission() async {
var androidInfo = await DeviceInfoPlugin().androidInfo;
var release = int.parse(androidInfo.version.release);
Permission permission;
if (release < 11) {
permission = Permission.storage;
} else {
permission = Permission.manageExternalStorage;
}
if (await permission.isGranted) {
return true;
} else {
var result = await permission.request();
if (result == PermissionStatus.granted) {
return true;
} else {
return false;
}
}
}
这是管理Android 11及更高版本的 Android 设备中外部存储访问的两种不同方法。
文件 Go 正在尝试访问all files access permission
。 这使应用程序可以访问任何读取、写入、访问和共享用户存储(外部或内部)中存在的所有文件。 您可以从此处阅读有关所有文件访问权限的更多信息 - 管理存储设备上的所有文件
WhatsApp - 不是要求all files access permission
,而是将其媒体保存在文件目录中。 保存在文件或缓存目录中不需要访问所有苍蝇,一个简单的权限对话框来写入和读取存储就可以完成任务。
您可以在getExternalFilesDir中阅读更多相关信息。
注意:这仅适用于您的 targetSdkVersion 为 30 的情况。针对 29 或以下版本,不需要all files permission
,因为它由系统处理。
您可以参考Android 11 中存储更新中的存储更新并根据您的用例请求权限。
即使您使用的是 Android 11 或更高版本,我们也必须在 Flutter 中询问存储权限而不是管理外部存储权限。我尝试将文件写入“android/media/packagename/”并且它工作正常,但是当我尝试写入其他位置它不起作用。 我认为 Android 内部以某种方式允许仅在同一个 package 中存储数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.