uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施
uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| Windows | Windows10 | HBuilderX |
操作步骤:
正常打包的app,安装之后第一次打开获取读写存储权限时,通过后台杀掉app,再次打开app不会重新申请读写存储权限,后续app使用会闪退。
预期结果:
再次打开app重新申请未正常处理的权限申请
实际结果:
app不再申请权限了
bug描述:
正常打包的app,安装之后第一次打开获取读写存储权限时,通过后台杀掉app,再次打开app不会重新申请读写存储权限,后续app使用会闪退。 附件为HbuilderX新建的uni-app默认模板项目,然后云打包之后安装在真机上的效果。
更多关于uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施的实战教程也可以访问 https://www.itying.com/category-93-b0.html
应该与你的应用调用的API有关 是云打包吗可以提供一下appid
更多关于uni-app 权限申请非正常操作情况下导致应用闪退 无补救措施的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我上传的附件视频中使用的代码是uni-app默认模板,没有做任何修改之后云打包的,他的App id 为UNIB170D7B
回复 8***@qq.com: 视频也没看到崩溃现象
回复 DCloud_Android_ST: 奔溃是在我项目中,项目代码中使用了uni.getStorageSync()。
回复 8***@qq.com: 查看你提供的appid发现应用是无法正常运行的。 你提供一下示例demo把或者重新云打包。需要能复现问题
回复 DCloud_Android_ST: 我这边找到问题发生的原因了,我自己增加的原生插件中file.createNewFile()的时候没有拿到权限。这边问一下,既然默认情况下申请外部存储权限了,为什么在用户没有拒绝或者同意的情况下,也就是再次启用app的时候不再次申请权限呢?
回复 8***@qq.com: 这是系统层面处理的。代码使用存储功能时需要申请权限。
回复 DCloud_Android_ST: 这说不清呀。如果安装后第一次打开的时候申请权限,那是不是代表用到这个权限了。如果权限没拿到,下次打开的时候不应该再次申请吗
回复 8***@qq.com: 嗯 目前应用第一次启动的权限申请只有一次,uniapp是可以配置是否申请的。后续功能用到存储权限才会再次申请。还有你这逻辑本来就应该自己判断存储权限申请的。没什么好异议的
回复 DCloud_Android_ST: 按照当前的android开发规范,敏感权限不是在需要使用到相关功能时才去申请吗?开屏时申请了应该可以断定开屏时尝试在存储中做读写操作了。视频中直接杀掉进程,就意味着权限没有拿到,读写操作也没有成功执行。那重新打开app的时候这个读写操作就不做了吗?
这是一个典型的权限申请状态管理问题。当应用在首次权限申请过程中被强制终止,系统可能记录了"已询问但未完成"的状态,但应用内部没有正确重置权限申请流程。
建议在app.vue的onLaunch或onShow生命周期中检测必要的权限状态,如果发现权限未授予且没有待处理的申请,应重新触发权限申请。可以使用uni.authorize或uni.getSetting配合uni.authorize实现权限状态的检查和重新申请。
对于读写存储权限,可以这样处理:
// 在app.vue的onShow中
onShow() {
this.checkStoragePermission()
},
methods: {
async checkStoragePermission() {
const settings = await uni.getSetting()
if (!settings.authSetting['scope.writePhotosAlbum']) {
// 权限未授予且没有待处理申请,重新申请
uni.authorize({
scope: 'scope.writePhotosAlbum',
fail: () => {
// 处理用户拒绝的情况
}
})
}
}
}

