Flutter Android 11 权限,例如 WhatsApp
Posted
技术标签:
【中文标题】Flutter Android 11 权限,例如 WhatsApp【英文标题】:Flutter Android 11 permissions like WhatsApp 【发布时间】:2021-11-08 13:06:42 【问题描述】:我正在尝试构建一个在 android 11 上运行并下载文件的 Flutter 应用程序。我曾经管理外部存储权限来实现这一点,但是当应用程序请求权限时,它会直接进入设置,而不是在应用程序内请求允许或拒绝。
例如,WhatsApp 将数据存储在 android/media 文件夹中,但它直接在应用程序中请求权限,而不是进入设置页面。请参考以下图片:
My application goes to settings like this/I need something like this
我的权限处理代码
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;
【问题讨论】:
请分享您的代码 sn-p 以获得更好的帮助。此外,根据指南,只有在用户永久拒绝该权限时,设置屏幕才会打开。 分享您的代码或查看此pub.dev/packages/permission_handler 看起来您需要添加检查权限被拒绝,权限被永久拒绝。仅在拒绝永久打开设置页面上。否则请求许可 嘿,Narayana,您找到解决方案了吗? 【参考方案1】:对于Android 11 及更高版本,这是管理 Android 设备中外部存储访问的两种不同方法。
Files Go 正在尝试访问 all files access permission
。这使应用程序可以访问任何读取、写入、访问和共享用户存储(外部或内部)中存在的所有文件。
您可以从此处阅读有关所有文件访问权限的更多信息 - Manage all files on a storage device
WhatsApp - 不是要求all files access permission
,而是将其媒体保存在文件目录中。保存在文件或缓存目录中不需要访问所有苍蝇,只需一个简单的权限对话框来写入和读取存储即可完成任务。
您可以在 getExternalFilesDir 了解更多信息。
注意:这仅适用于您的 targetSdkVersion 为 30 的情况。针对 29 或以下版本,不需要 all files permission
,因为它由系统处理。
您可以在Storage updates in Android 11中参考存储更新并根据您的用例请求权限。
【讨论】:
您提供的链接没有提到如何像whatsapp一样在flutter中实现它 从代码中删除 Permission.manageExternalStorage 应该可以解决问题 如果您删除 Permission.manageExternalStorage,您将无法再读取此位置的隐藏文件夹 /storage/emulated/0/Android/Media/com.whatsapp/WhatsApp/Media/.Statuses 对此有何解决方案? @AnkitParmar ,如果是您的应用程序包名称/存储,则可以读取,如果不是您的应用程序,则无法访问。 @Nitish Ya 我知道但是如何阅读其他应用程序的隐藏文件夹?没有 Permission.manageExternalStorage 权限?【参考方案2】:即使您使用的是 Android 11 或更高版本,我们也必须询问存储权限,而不是 Flutter 中的管理外部存储权限。我尝试将文件写入'android/media/packagename/'并且它工作正常,但是当我尝试写入其他位置时它不起作用。我认为不知何故,Android 内部只允许将数据存储在同一个包中。
【讨论】:
以上是关于Flutter Android 11 权限,例如 WhatsApp的主要内容,如果未能解决你的问题,请参考以下文章