ERROR_ALREADY_REQUESTING_PERMISSIONS 颤动

Posted

技术标签:

【中文标题】ERROR_ALREADY_REQUESTING_PERMISSIONS 颤动【英文标题】:ERROR_ALREADY_REQUESTING_PERMISSIONS on flutter 【发布时间】:2019-09-27 21:49:45 【问题描述】:

我用flutter创建了一个android应用程序,我在应用程序运行时第一次创建权限请求,所以当用户单击拒绝然后单击登录按钮时,再次请求权限。我收到了这个错误

Exception has occurred.
PlatformException (PlatformException(ERROR_ALREADY_REQUESTING_PERMISSIONS, A request for permissions is already running, please wait for it to finish before doing another request (note that you can request multiple permissions at the same time)., null))

这是我的代码

@override
  void initState() 
    this.setSharedPreferences();
    PermissionHandler().checkPermissionStatus(PermissionGroup.location).then(_checkPermission);
  

void _checkPermission(PermissionStatus status)
    if(status == PermissionStatus.unknown || status == PermissionStatus.denied)
      _askPermission();
    
  

void _askPermission() async
    await PermissionHandler().requestPermissions([PermissionGroup.location]);
  

void onLogin() async 
   PermissionStatus locationPermission = await PermissionHandler().checkPermissionStatus(PermissionGroup.location);
   if(locationPermission == PermissionStatus.denied || locationPermission == PermissionStatus.unknown)
        _askPermission();
   else
     // user available to login
   

如何处理?谢谢你的回答

【问题讨论】:

您是如何解决这些问题的? 【参考方案1】:

问题是当它检查权限时,它返回 null 而不是任何权限状态,这会导致异常。可能是多个人填写了与位置权限相关的问题。

https://github.com/BaseflowIT/flutter-geolocator/issues/172

https://github.com/BaseflowIT/flutter-geolocator/issues/

https://github.com/BaseflowIT/flutter-permission-handler/issues

void getPermissionStatus() async 
        PermissionStatus permission = await PermissionHandler()
            .checkPermissionStatus(PermissionGroup.storage);
        if (permission == PermissionStatus.granted) 
         // ideally you should specify another condition if permissions is denied
else if (permission == PermissionStatus.denied ||
            permission == PermissionStatus.disabled ||
            permission == PermissionStatus.restricted) 
          await PermissionHandler().requestPermissions([PermissionGroup.storage]);
          getPermissionStatus();
        
      

我认为您的代码没有问题,您可以使用递归而不是创建两个单独的函数。

【讨论】:

@NdeemSiddhique 虽然如果权限状态被禁用则获得位置权限意味着应用程序具有位置权限但该设备的位置是然后有没有办法指导用户打开该设备的位置。跨度> 这是一个非常危险的解决方案!它很容易导致无限循环,从而导致应用程序崩溃。 不是一个无限循环,但它不会让用户过去,直到它允许权限。取决于用户案例,但我同意它不是空闲的。我会更新的。 有人可以用最新版本的权限处理程序编写相同的代码吗:^5.0.1+1【参考方案2】:

对于那些正在使用更新版本的permission_handler:

Future<void> permission() async 
  if (await Permission.storage.isDenied) 
    await Permission.storage.request();
  
  if (await Permission.location.isDenied) 
    await Permission.location.request();
  

通过这种方式,您可以一次请求多个权限...

【讨论】:

以上是关于ERROR_ALREADY_REQUESTING_PERMISSIONS 颤动的主要内容,如果未能解决你的问题,请参考以下文章

函数参数

多重背包

合租房合同模板

启动代码分析 02

ACM数论 求幂乘

Windows下虚拟机安装Mac OS X —– VM12安装Mac OS X 10.11