拒绝后权限请求颤动应用程序
Posted
技术标签:
【中文标题】拒绝后权限请求颤动应用程序【英文标题】:Permission request flutter app after denial 【发布时间】:2022-01-02 01:20:48 【问题描述】:我正在开发一个flutter应用,我需要管理权限请求,但是我不知道如何处理一个特定的事件:
如果我通过弹出窗口两次拒绝相同的权限,以后可能无法批准它,因为弹出窗口不会再次出现。
Future<void> requestStoragePermission() async
var status = await Permission.storage.status;
if(status.isPermanentlyDenied)
await AppSettings.openAppSettings();
else
await Permission.storage.request();
我不明白如何区分权限尚未授予或多次拒绝,因为函数:Permission.storage.status 总是返回“拒绝”。
******编辑******
当用户多次(2次)拒绝相同的权限时会出现问题,因为不再显示权限请求弹出窗口,在这种情况下需要手动打开应用程序设置并手动修改权限。我必须确保:前两次我通过弹出窗口请求权限,然后我应该打开设置屏幕
【问题讨论】:
【参考方案1】:我一直使用granted
和limited
两种状态来管理我的权限(仅用于ios14+)。这两个权限是唯一真实的状态。其他都是虚假状态。
permission_handler
包已经为您处理了很多逻辑。在它发出请求之前,它会检查状态以查看它是否已经定义。如果是,那么它将返回状态。如果该权限从未被请求过,那么它将请求该权限。
就个人而言,我为权限请求设置了一个通用方法,以保持干燥。
Future<bool> requestPermission(Permission setting) async
// setting.request() will return the status ALWAYS
// if setting is already requested, it will return the status
final _result = await setting.request();
switch (_result)
case PermissionStatus.granted:
case PermissionStatus.limited:
return true;
case PermissionStatus.denied:
case PermissionStatus.restricted:
case PermissionStatus.permanentlyDenied:
return false;
然后我提出一个类似的请求
final canUseStorage = await requestPermission(Permission.storage);
if (canUseStorage)
// do something with storage
如果您的 UI 依赖于来自 Permission
的状态,那么您仍然调用 Permission.storage.status
。
[编辑]
目前,您无法跟踪通过permission_handler
显示请求弹出窗口的次数。它只返回状态。您需要根据返回的状态值将用户带到设置。
旁注 而不是直接将用户带到设置中。也许你显示一个弹出窗口说“看起来我们没有权限......”,用户可以点击一个按钮进入设置,为用户提供一些上下文,说明他们为什么需要去他们的设置。这也是更好的用户体验!
【讨论】:
请看我的问题,我编辑了它 @Mattia 我更新了我的答案以上是关于拒绝后权限请求颤动应用程序的主要内容,如果未能解决你的问题,请参考以下文章