uni-app中uni.getRecorderManager()在鸿蒙平台存在问题
uni-app中uni.getRecorderManager()在鸿蒙平台存在问题
结束录音后,onStop事件执行次数累积增加,比如第一次stop,onStop事件执行了一次,第二次stop,onStop事件执行了两次,第三次stop,onStop事件执行了3次。导致我第二次发送语音会一次性发出两条,第三次会发出3条....依次类推。安卓和IOS同样的代码经过测试没有这个问题。当前是用mete60真机,HBX版本4.36。
开发环境 | 版本号 | 项目创建方式 |
---|---|---|
mete60 | HBX 4.36 | - |
更多关于uni-app中uni.getRecorderManager()在鸿蒙平台存在问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
有没有什么临时解决的方案?
更多关于uni-app中uni.getRecorderManager()在鸿蒙平台存在问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
没有代码无法排查,猜测你是每次都执行了一次 onStop 监听,你先把每次都监听的逻辑改一下,我也调整下代码
回复 DCloud_UNI_LXH: 是的,每次都执行了onStop
回复 DCloud_UNI_LXH: 我给您写了个案例可以试下。个人感觉问题是录音这个API在返回上级页面的时候没有卸载。
由于平台上传文件大小限制,没法传完整的uniapp项目,下面是两个页面,需要从index.vue跳转到testRecord.vue页面。
测试流程:从index.vue跳转到testRecord.vue,进行录音操作(第一次正常),然后返回到index页面,再进testRecord页面,再进行录音操作,这次会出现问题(onStop里面打印了两次),如果继续执行这一整套操作,下次会打印三次,以此累加…
先从逻辑上不要每次都执行 onStop。下次发版会带上这个问题的修复
不知道您理解的问题是不是和我一样。我之前是在一个页面里把onStop重复执行了,后来我给onStop放到onload里去了,第一次进来确实就正常了,但是返回上一个页面再进来这个页面就出现问题了。
您说的临时解决方案让我不要每次都执行onStop,是要让我设置全局来判断?每次运行APP只执行一次onStop吗?
回复 Adlaw: 我下面有一个临时解决方案。你也可以在逻辑上使用一个变量来在 onStop 内部进行监听。按一次按钮只能执行一次
大佬按照这个方法弄完,运行成功,但是应用一点击就闪退
回复 s***@yinmaisoft.com: 刚刚更新的版本是否修复了这个bug
回复 s***@yinmaisoft.com: 没有带这个修复。提供的临时解决方案一运行就闪退?DevEco 中的日志是什么?
是否用了 uni-push 之类需要在 manifest 中勾选的功能?都升级到最新版本,在 ohpm 上搜索。比如
在uni-app中使用uni.getRecorderManager()
进行录音功能时,确实可能会遇到一些特定于鸿蒙(HarmonyOS)平台的兼容性问题。以下是一个示例代码,展示了如何在uni-app中实现录音功能,并包含了一些针对鸿蒙平台潜在问题的处理思路。请注意,由于鸿蒙平台的特殊性,这些处理可能需要根据实际情况进行调整。
示例代码
// 引入uni-app录音管理器
const recorderManager = uni.getRecorderManager();
// 配置录音参数
recorderManager.set({
format: 'mp3', // 设置录音格式为mp3
sampleRate: 44100, // 设置采样率
numberOfChannels: 1, // 设置声道数
encodeBitRate: 192000, // 设置编码码率
metering: true // 开启音量监测
});
// 开始录音
recorderManager.start({
success: function () {
console.log('录音开始');
},
fail: function (err) {
// 针对鸿蒙平台可能的问题进行特殊处理
if (uni.getSystemInfoSync().platform === 'harmonyos') {
console.error('鸿蒙平台录音失败:', err);
// 可尝试重新初始化录音管理器或提示用户检查权限
// recorderManager.destroy(); // 销毁录音管理器实例
// recorderManager = uni.getRecorderManager(); // 重新获取实例
// 提示用户检查录音权限
uni.showModal({
title: '提示',
content: '请在设置中检查录音权限',
showCancel: false
});
} else {
console.error('录音失败:', err);
}
}
});
// 监听录音数据
recorderManager.onDataChunk(function (res) {
console.log('录音数据块:', res.data);
// 可以将res.data保存到本地或进行其他处理
});
// 停止录音
function stopRecording() {
recorderManager.stop({
success: function (res) {
console.log('录音停止,临时文件路径:', res.tempFilePath);
// 处理录音文件,如上传或保存到本地
},
fail: function (err) {
console.error('停止录音失败:', err);
}
});
}
// 监听停止录音按钮点击事件(示例)
document.getElementById('stopBtn').addEventListener('click', stopRecording);
注意事项
- 权限检查:确保在鸿蒙平台上已正确申请并授予录音权限。
- 平台判断:通过
uni.getSystemInfoSync().platform
判断当前平台,对鸿蒙平台进行特殊处理。 - 错误处理:在录音的
fail
回调中,针对鸿蒙平台可能的问题进行日志记录或用户提示。 - 资源管理:在录音过程中,注意资源的管理和释放,避免内存泄漏。
以上代码提供了一个基本的录音功能实现,并针对鸿蒙平台可能遇到的问题进行了处理思路的展示。实际开发中,可能需要根据具体需求和鸿蒙平台的特性进行进一步的优化和调整。