react-native-permissions发起request授权,用户授权或取消没有回调解决
程序员文章站
2022-06-05 14:19:53
...
最近调试授权bug相关问题,使用这个组件react-native-permissions,发现发起request授权,用户授权或取消没有回调;各种调试都没有办法解决。看下面代码
import { check, request, PERMISSIONS, RESULTS, openSettings } from 'react-native-permissions';
let result = await check(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE)
switch (result) {
case RESULTS.UNAVAILABLE:
//不支持该功能
Alert.alert('', '您的设备不支持该功能', [{ text: '确定' }]);
return;
case RESULTS.DENIED:
//该权限尚未被请求、被拒绝,但可请求
let req = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
if (req == RESULTS.DENIED) {
//Alert.alert('', '您已经拒绝授权', [{ text: '我知道了' }]);
Toast.show('您已经拒绝授权', {
duration: Toast.durations.SHORT,
position: Toast.positions.CENTER,
animation: false,//不显示动画
});
return;
}
break;
case RESULTS.GRANTED:
//授予权限
break;
case RESULTS.BLOCKED:
//该权限被拒绝
Alert.alert('提示', '您已经禁用APP读写手机储存权限,图片文件访问受限', [
{
text: '关闭',
onDismiss: () => { }
},
{
text: '去设置开启权限',
onPress: () => {
openSettings()
}
}
]);
return;
}
发起request授权let req = await request(PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE);
这段代码后面不执行,一直等待没有结果,查了很久才解决。
解决办法:
在Android工程Java代码MainActivity.java里复写onRequestPermissionsResult
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){//
case 0://如果申请权限回调的参数
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(this,"申请成功",Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this,"拒绝权限",Toast.LENGTH_SHORT).show();
}
break;
}
}
原因:
首先6.0之前的权限 直接在 AndroidManifest 里面申请就ok
6.0以后 包括6.0 都需要申请动态权限,onRequestPermissionsResult是授权回调处理,没有的话就一直阻塞,等待导致后面部分代码没有执行。
上一篇: Permissions
下一篇: 《大话设计模式01》--单例模式