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
先判断有没有权限,再进行下一步
更多关于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); });