uni-app uni.getRecorderManager()录音功能在iOS下关于权限的问题

uni-app uni.getRecorderManager()录音功能在iOS下关于权限的问题

项目信息 详情
产品分类 uniapp/App
PC开发环境 Windows
PC操作系统版本 Win10
HBuilderX类型 正式
HBuilderX版本 3.4.7
手机系统 iOS
手机系统版本 iOS 15
手机厂商 苹果
手机机型 iphone xr
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

this.recorderManager = uni.getRecorderManager();   //获取录音管理器  
this.recorderManager.start();  //开始录音  (第一次苹果会申请权限,省去权限判断代码)  
this.recorderManager.onStart(()=>{     //苹果未点击确定,但是触发了onStart方法  
    console.log("开始录音");  
})  

预期结果:

希望第一次点击确定后触发onStart方法

实际结果:

苹果在未点击确定的情况下触发了onStart方法

bug描述:

uni.getRecorderManager()首次使用时 申请录音权限还未点击确定按钮 就已经触发了recorderManager.onStart() 方法
正常情况是 点击确定按钮同意开启权限后才可以触发onStart()!


更多关于uni-app uni.getRecorderManager()录音功能在iOS下关于权限的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html

14 回复

先判断有没有权限,再进行下一步

更多关于uni-app uni.getRecorderManager()录音功能在iOS下关于权限的问题的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是这么做的, 但是苹果端首次使用时先要开启一下录音管理器才能进行授权 ,但是在等待授权的过程中就已经触发了onStart方法,不知道这么说是否能明白

回复 1***@qq.com: 弹窗的授权同意后,是直接会进行业务逻辑的处理,还是说同意后,还需要重新点击录音后,才进行业务的处理

回复 1***@qq.com: 没有权限就在使用Start然后stop去获取IOS的权限,return阻止

你可以先判断一下 有没有权限
可以使用这个云端插件 https://ext.dcloud.net.cn/plugin?id=594

我遇到的BUG是ios在弹出授权窗口时 用户还未点击同意或者拒绝按钮, 但是触发了onStart方法;

希望明白了我所表达的意思

回复 1***@qq.com: 这个跟前端同事确认了 是个存在的Bug 近期会修复

回复 天生DR: 这个bug修复了吗

回复 小小菜76055421: 目前还没有

回复 天生DR: 发现用户关闭权限后,还能进行录音,这个bug有发现吗

回复 天生DR: 大佬啥时候可以修复啊

在 uni-app 中使用 uni.getRecorderManager() 进行录音时,iOS 平台对录音权限有严格的要求。以下是一些关于 iOS 平台下录音权限的常见问题和解决方案:

1. 权限申请

  • 描述:在 iOS 上,应用需要明确请求用户的录音权限(Microphone 权限),否则无法进行录音操作。

  • 解决方案:在首次使用录音功能时,应用需要弹出权限请求对话框,用户同意后才能正常使用录音功能。你可以在 App.vue 或页面的 onLoad 生命周期中调用权限请求方法。

    uni.authorize({
      scope: 'scope.record',
      success() {
        console.log('录音权限已授权');
      },
      fail() {
        console.log('录音权限未授权');
      }
    });
    

    如果用户拒绝了权限请求,你可以引导用户手动去系统设置中开启录音权限。

2. 权限被拒绝

  • 描述:如果用户拒绝了录音权限,应用将无法使用录音功能。

  • 解决方案:在用户拒绝权限后,你可以提示用户去系统设置中手动开启权限。可以通过 uni.openSetting() 方法打开系统设置页面。

    uni.showModal({
      title: '提示',
      content: '录音功能需要您的授权,请前往设置开启录音权限',
      success(res) {
        if (res.confirm) {
          uni.openSetting({
            success(settingRes) {
              console.log(settingRes.authSetting);
            }
          });
        }
      }
    });
    

3. 权限状态检查

  • 描述:在录音前,你可以检查当前应用是否已经获得了录音权限。

  • 解决方案:使用 uni.getSetting() 方法检查当前权限状态。

    uni.getSetting({
      success(res) {
        if (res.authSetting['scope.record']) {
          console.log('已授权录音权限');
        } else {
          console.log('未授权录音权限');
        }
      }
    });
    

4. iOS 静音模式下的录音

  • 描述:在 iOS 设备上,如果设备处于静音模式,录音功能可能会受到影响。
  • 解决方案:确保设备音量设置正确,并且录音功能在非静音模式下使用。

5. iOS 版本兼容性

  • 描述:不同版本的 iOS 系统对录音权限的处理可能有所不同。
  • 解决方案:确保你的应用兼容不同版本的 iOS 系统,并在开发过程中进行充分测试。

6. 录音功能的使用

  • 描述:在获得录音权限后,你可以正常使用 uni.getRecorderManager() 进行录音。

    const recorderManager = uni.getRecorderManager();
    
    recorderManager.start({
      duration: 60000, // 录音时长,单位 ms
      sampleRate: 44100, // 采样率
      numberOfChannels: 1, // 录音通道数
      encodeBitRate: 192000, // 编码码率
      format: 'mp3', // 音频格式
    });
    
    recorderManager.onStart(() => {
      console.log('录音开始');
    });
    
    recorderManager.onStop((res) => {
      console.log('录音结束', res.tempFilePath);
    });
回到顶部