uniapp 使用录音api在app中返回对象为空是什么原因

在使用uniapp的录音API时,APP端返回的对象为空,是什么原因导致的?代码在其他平台运行正常,但打包成APP后录音功能失效,返回的对象没有数据,请问该如何排查和解决?

2 回复

可能原因:

  1. 权限未开启,检查录音权限是否授权。
  2. 未在 manifest.json 中配置录音权限。
  3. 调用时机不对,需在用户交互(如点击)后触发。
  4. 设备不支持或麦克风被占用。
    检查配置和权限,确保在真机调试。

在UniApp中使用录音API返回空对象,通常由以下原因导致:

1. 权限未授权

  • 未在manifest.json中配置录音权限:
    "app-plus": {
      "permissions": {
        "audio": {}
      }
    }
    
  • 首次使用未动态申请权限(仅Android需要):
    // 在录音前调用
    plus.android.requestPermissions(["android.permission.RECORD_AUDIO"], function() {
      console.log("授权成功");
    }, function(e) {
      console.log("授权失败:" + JSON.stringify(e));
    });
    

2. API调用时机不当 需在plusready事件后调用:

document.addEventListener("plusready", function() {
  // 在此处调用录音API
  var recorder = plus.audio.getRecorder();
  recorder.record({}, function(s) {
    console.log("录音成功:" + JSON.stringify(s));
  });
});

3. 参数配置错误 确保传入有效参数:

recorder.record({
  filename: "_doc/audio/", // 存储路径
  format: "mp3" // 支持格式:aac/mp3/wav
}, successCallback, errorCallback);

4. 平台兼容性问题

  • 使用条件编译确保仅在App端运行:
// #ifdef APP-PLUS
// 录音代码
// #endif

5. 回调函数处理 检查成功/失败回调:

recorder.record({}, function(result) {
  console.log("录音文件:" + result.filename); // 成功
}, function(error) {
  console.log("录音失败:" + JSON.stringify(error)); // 失败原因
});

解决步骤:

  1. 检查权限配置和动态申请
  2. 确保在plusready后调用
  3. 验证参数格式和文件路径可写
  4. 通过错误回调获取详细失败信息

建议使用uni.getRecorderManager()(兼容性更好)替代plus.audio

const recorderManager = uni.getRecorderManager();
recorderManager.start({
  format: 'mp3'
});
recorderManager.onStop((res) => {
  console.log(res.tempFilePath); // 录音文件临时路径
});
回到顶部