鸿蒙Next录音文件获取大小为0是什么原因

我在鸿蒙Next系统上使用录音功能时,发现生成的录音文件大小为0,无法正常保存录音内容。请问这是什么原因导致的?需要检查哪些权限设置或代码配置?有没有遇到相同问题的朋友可以分享一下解决方案?

2 回复

哈哈,程序员最怕的“空气文件”!可能原因:

  1. 权限没给够(麦克风权限开了吗?)
  2. 录音压根没开始(检查start()调用)
  3. 文件路径写进了黑洞(路径正确吗?)
  4. 存储空间已满(手机:我饱了!)
  5. 回调函数在摸鱼(onRecording没触发?)

建议:先给logcat喂点咖啡,看它吐什么错误信息!

更多关于鸿蒙Next录音文件获取大小为0是什么原因的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中录音文件大小为0,通常由以下原因导致:

1. 权限问题

  • 缺少录音权限:应用未获取ohos.permission.MICROPHONE权限。
  • 解决方案
    • module.json5中声明权限:
      {
        "module": {
          "requestPermissions": [
            {
              "name": "ohos.permission.MICROPHONE"
            }
          ]
        }
      }
      
    • 动态申请权限(API 9+):
      import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
      
      let context = ... // 获取上下文
      let atManager = abilityAccessCtrl.createAtManager();
      atManager.requestPermissionsFromUser(context, ['ohos.permission.MICROPHONE']).then((data) => {
        console.log('权限申请结果:', data);
      });
      

2. 录音未正确启动或停止

  • 问题:未调用start()stop()方法,或停止过早。
  • 代码示例(确保完整流程):
    import audio from '@ohos.multimedia.audio';
    
    let audioRecorder;
    async function startRecording() {
      let recConfig = {
        audioEncoder : audio.AudioEncoder.AAC_LC,
        audioSampleRate : audio.AudioSampleRate.SAMPLE_RATE_44100,
        numberOfChannels : 2,
        uri : 'file://.../record.m4a' // 指定有效路径
      };
      
      audioRecorder = await audio.createAudioRecorder();
      await audioRecorder.prepare();
      await audioRecorder.start(); // 开始录音
    }
    
    async function stopRecording() {
      await audioRecorder.stop();  // 停止录音
      await audioRecorder.release(); // 释放资源
    }
    

3. 文件路径无效

  • 问题:URI路径无写入权限或路径错误。
  • 解决:使用应用沙箱路径(如context.filesDir):
    let filePath = context.filesDir + '/record.m4a';
    let uri = 'file://' + filePath;
    

4. 资源未释放

  • 多次创建AudioRecorder实例未释放,导致冲突。确保每次录音后调用release()

5. 系统资源占用

  • 其他应用占用麦克风,或系统音频服务异常。重启设备或关闭冲突应用。

6. 硬件问题

  • 麦克风损坏或被遮挡。测试其他录音应用排查。

排查步骤:

  1. 检查权限是否授予。
  2. 确认start()stop()成对调用。
  3. 验证文件路径可写。
  4. 查看日志捕获错误信息(使用HiLog输出关键步骤)。

通过以上步骤定位问题,重点检查权限和录音生命周期管理。

回到顶部