uni-app 跳转到“系统权限”设置页,先“允许”再“拒绝”,返回app后app闪退
uni-app 跳转到“系统权限”设置页,先“允许”再“拒绝”,返回app后app闪退
操作步骤:
- 可在demo中申请定位权限,默认不开启,跳转到权限页,“允许”打开权限,再“拒绝”定位权限;返回app
预期结果:
- 默认不开启权限,跳转到权限页,“允许”打开权限,再“拒绝”定位权限;返回app时正常运行
实际结果:
- 闪退
bug描述:
- 点击打开定位权限,跳转到“系统权限”页面,点击“允许”,再点“拒绝”,返回app,应用闪退
附件
更多关于uni-app 跳转到“系统权限”设置页,先“允许”再“拒绝”,返回app后app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
1 回复
更多关于uni-app 跳转到“系统权限”设置页,先“允许”再“拒绝”,返回app后app闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的权限状态变更导致的异常问题。当应用从系统权限设置页面返回时,如果权限状态发生了改变(尤其是从“允许”变为“拒绝”),应用可能没有正确处理权限变更事件,导致崩溃。
可能的原因和解决方案:
-
权限回调处理不当:在
onShow或onHide生命周期中,可能没有正确处理权限变更后的状态同步。建议在onShow中重新检查权限状态,并更新应用状态。 -
异步操作未完成:权限变更可能触发异步操作(如重新初始化定位模块),如果这些操作未完成或发生错误,可能导致闪退。确保异步操作有正确的错误处理。
-
原生模块状态不一致:某些原生模块(如定位)在权限被拒绝后可能无法正确处理,导致崩溃。检查相关模块的文档,确保在权限被拒绝时进行适当的资源释放或状态重置。
-
日志分析:查看提供的崩溃日志文件,定位具体的错误堆栈,以便更精确地解决问题。
建议的代码调整:
在页面的 onShow 生命周期中,重新检查权限状态,并处理权限变更:
onShow() {
// 重新检查定位权限状态
uni.getSetting({
success: (res) => {
if (!res.authSetting['scope.userLocation']) {
// 权限被拒绝,执行相应的处理逻辑
this.stopLocationUpdates();
} else {
// 权限已授予,继续正常操作
this.startLocationUpdates();
}
}
});
}

