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


这是一个典型的权限状态变更导致的异常问题。当应用从系统权限设置页面返回时,如果权限状态发生了改变(尤其是从“允许”变为“拒绝”),应用可能没有正确处理权限变更事件,导致崩溃。

可能的原因和解决方案:

  1. 权限回调处理不当:在 onShowonHide 生命周期中,可能没有正确处理权限变更后的状态同步。建议在 onShow 中重新检查权限状态,并更新应用状态。

  2. 异步操作未完成:权限变更可能触发异步操作(如重新初始化定位模块),如果这些操作未完成或发生错误,可能导致闪退。确保异步操作有正确的错误处理。

  3. 原生模块状态不一致:某些原生模块(如定位)在权限被拒绝后可能无法正确处理,导致崩溃。检查相关模块的文档,确保在权限被拒绝时进行适当的资源释放或状态重置。

  4. 日志分析:查看提供的崩溃日志文件,定位具体的错误堆栈,以便更精确地解决问题。

建议的代码调整: 在页面的 onShow 生命周期中,重新检查权限状态,并处理权限变更:

onShow() {
    // 重新检查定位权限状态
    uni.getSetting({
        success: (res) => {
            if (!res.authSetting['scope.userLocation']) {
                // 权限被拒绝,执行相应的处理逻辑
                this.stopLocationUpdates();
            } else {
                // 权限已授予,继续正常操作
                this.startLocationUpdates();
            }
        }
    });
}
回到顶部