Flutter Permissions 状态 NotAgain 即使在第一次启动时

Posted

技术标签:

【中文标题】Flutter Permissions 状态 NotAgain 即使在第一次启动时【英文标题】:Flutter Permissions status NotAgain even on first launch 【发布时间】:2019-07-18 00:09:27 【问题描述】:

我正在使用permission 插件来检查权限状态并请求它们是否处于deny 状态。但是从第一次开始,手机和存储的权限状态都是notAgain。因此,我无法请求用户授予phonestorage 的权限。我也在我的 android 清单文件中指定了它们。

这里是检查和请求权限的代码 sn-p

List<Permissions> permissions = await Permission.getPermissionStatus([PermissionName.Location, PermissionName.Phone, PermissionName.Storage]);
    permissions.forEach((permission) 
      if(permission.permissionStatus.toString().contains('deny') )
        neededPermissions.add(permission.permissionName);
      
    );
if(neededPermissions.length > 0)
      requestPermissions(neededPermissions);
    

我不明白为什么他们是notAgain 从第一次启动应用程序开始

【问题讨论】:

你解决了这个问题了吗?我真的需要为了完成我的应用程序......它阻碍了我...... 现在,我正在使用 simple_permissions 插件 (pub.dev/packages/simple_permissions) 通过对该插件代码进行一些更改。它很适合我的需求。 【参考方案1】:

我已经编辑了这个答案,希望有人会觉得它有帮助。 万一有人为此苦苦挣扎。这个包permission_handler 提供强大的实用程序来正确处理权限。它最近已更新为包含 isPermanentlyDenied 标志,与 Android 上的“不再询问”相同。

【讨论】:

我不知道为什么这会解决问题......无论如何,getPermissionStatus 不再输出的事实意味着弹出窗口不会出现......至少这就是我的意思结束......但我仍然非常希望解决这个问题。【参考方案2】:

也许你的调用请求权限两次,在 initState() 中调用请求权限用于启动请求。

@override
void initState() 
super.initState();

requestPermission();

  

requestPermission() async 
final res = await SimplePermissions.requestPermission(
    Permission.WriteExternalStorage);
print("permission request result is " + res.toString());

【讨论】:

以上是关于Flutter Permissions 状态 NotAgain 即使在第一次启动时的主要内容,如果未能解决你的问题,请参考以下文章

Flutter MissingPluginException(在通道 flutter.baseflow.com/permissions/methods 上找不到方法 init 的实现)

Flutter IOS:CocoaPods 找不到 pod“simple_permissions”的兼容版本:

Ubuntu 无法连接设备 no permissions (verify udev rules)

Ubuntu 无法连接设备 no permissions (verify udev rules)

Ubuntu 无法连接设备 no permissions (verify udev rules)

错误记录发布 Flutter 插件包报错 ( ‘gmail.com‘ has insufficient permissions to upload new versions of package)(代