android - ERROR_ALREADY_REQUESTING_PERMISSIONS 颤动
问题描述
我用颤振创建了一个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
}
}
如何处理?感谢您的回答
解决方案
问题是当它检查权限时,它返回 null 而不是任何 Permission 状态,这会导致异常。它可能是一个错误,多人填写了与位置权限相关的问题。
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();
}
}
无论如何,我认为您的代码没有问题,您可以使用递归而不是创建两个单独的函数。
推荐阅读
- javascript - 使用“新”构造函数初始化对象时,Sinon Spy 不起作用
- javascript - 在 VueJS 中提交表单后将更新的数据填充到表中
- android - 以编程方式滚动内容时,Appbar 滚动行为不起作用
- verilog - 事件控制除了作为 always 块的第一条语句不支持
- android - 什么是 Android Binder“事务”?
- python - 如何使用pygame在python中播放音乐?
- javascript - json替换nodejs中的所有$regex
- javascript - 按城市/地区分组 JSON 坐标
- python - 如果列值匹配,则返回值列表,否则在列表中添加 0
- javascript - React 和 firebase setState '你必须指定“to”属性'