uni-app uni.chooseImage选择视频弹窗申请权限拒绝后会立即自动再一次弹出

发布于 1周前 作者 nodeper 来自 Uni-App

uni-app uni.chooseImage选择视频弹窗申请权限拒绝后会立即自动再一次弹出

示例代码:

uni.chooseImage


## 操作步骤:


安装app后第一次调用uni.chooseImage,选择拍摄选项,弹出申请权限

预期结果:

拒绝一次后就不再弹出,直到下一次申请


## 实际结果:


弹出第一次权限申请拒绝后,没有任何操作,立马又弹出第二次申请

bug描述:

安装应用后初次调用uni.chooseImage申请相机权限时,拒绝后会立马再次申请

信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC系统版本 win10 专业版21H2
HBuilderX类型 正式
HBuilderX版本 3.96
手机系统 Android
手机系统版本 Android 13
手机厂商 vivo
手机机型 iqoo8
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

6 回复

只会弹出一次,你看看fail 回调是不是写逻辑了
<template>
<view class="content">
<button @click=“get”>获取图片</button>
</view>
</template>

<script> export default { data() { return { title: 'Hello' } }, onLoad() { }, methods: { get(){ uni.chooseImage({ count: 6, //默认9 sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], //从相册选择 success: function (res) { console.log(JSON.stringify(res.tempFilePaths)); }, fail(err) { console.log(err) uni.showToast({ title:'授权被拒绝', icon:'none' }) } }); } } } </script> <style> .content { display: flex; flex-direction: column; align-items: center; justify-content: center; } .logo { height: 200rpx; width: 200rpx; margin-top: 200rpx; margin-left: auto; margin-right: auto; margin-bottom: 50rpx; } .text-area { display: flex; justify-content: center; } .title { font-size: 36rpx; color: #8f8f94; } </style>

没有写任何逻辑,就只是写了uni.chooseImage

var that = this // #ifdef APP-PLUS uni.chooseImage({ count: 1, //默认9 crop: { quality: 100,//默认80 width: 160,//160px height: 160,//160px resize: true,//是否将width和height作为裁剪保存图片真实的像素值,默认true.注:设置为false时在裁剪编辑界面显示图片的像素值,设置为true时不显示 }, success: function (res) { console.log(‘图片’,JSON.stringify(res.tempFilePaths)); console.log(‘图片地址’,res) that.submitFiles(res.tempFilePaths[0]) } }); // #endif
不只是弹两次授权的问题,谈两次授权都没有获取到权限后,再次点击拍摄没有任何反应

我这里暂时这个问题,我都忘记怎么解决了

发现这个问题了 怎么解决的

uni-app 中使用 uni.chooseImage 方法时,如果用户拒绝了权限申请,系统可能会再次弹出权限请求弹窗。这种行为通常是由于系统或框架的设计,以确保用户能够明确地授予或拒绝权限。

为了避免这种情况,你可以在代码中处理用户拒绝权限的情况,并采取相应的措施。以下是一个示例代码,展示了如何在用户拒绝权限后不再自动弹出权限请求弹窗:

uni.chooseImage({
  count: 1,
  sourceType: ['album', 'camera'],
  success: function (res) {
    console.log('选择成功', res.tempFilePaths);
  },
  fail: function (err) {
    console.log('选择失败', err);
    if (err.errMsg === 'chooseImage:fail auth deny') {
      // 用户拒绝了权限
      uni.showToast({
        title: '您拒绝了权限,无法选择图片',
        icon: 'none'
      });
    }
  }
});

解释:

  1. success 回调:当用户成功选择图片或视频时触发。
  2. fail 回调:当用户拒绝权限或选择失败时触发。
  3. err.errMsg === 'chooseImage:fail auth deny':检查错误信息是否为权限被拒绝的情况。
  4. uni.showToast:显示提示信息,告知用户权限被拒绝。

进一步处理:

如果你希望在用户拒绝权限后,引导用户手动开启权限,可以使用 uni.openSetting 方法打开系统设置页面,让用户手动开启权限:

uni.showModal({
  title: '提示',
  content: '您拒绝了权限,是否前往设置开启?',
  success: function (res) {
    if (res.confirm) {
      uni.openSetting({
        success: (res) => {
          console.log('设置页面打开成功', res);
        },
        fail: (err) => {
          console.log('设置页面打开失败', err);
        }
      });
    }
  }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!