You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native iOS端录音初始化失败问题求助(附代码)

初始化录音时发生错误 - iOS 16.0 - iPhone 14 Pro模拟器

环境信息

  • react-native-audio-recorder-player版本:3.5.3
  • React Native版本:0.71.4
  • 问题平台:Android真机/模拟器运行正常,iOS真机/模拟器均无法运行

预期行为

启动录音功能

实际行为

无法完成录音初始化

代码示例

const path = Platform.select({
  ios: `${RNFetchBlob.fs.dirs.CacheDir}/sound.m4a`,
  android: `${RNFetchBlob.fs.dirs.CacheDir}/sound.mp4`,
});
const onStartRecording = React.useCallback(async () => {
  setIsRecording(true);
  await audioRecorderPlayer.startRecorder(path);
  audioRecorderPlayer.addRecordBackListener(e => {
    setRecordingTime(
      audioRecorderPlayer.mmssss(Math.floor(e.currentPosition)).split(':')[0] + ':' +
      audioRecorderPlayer.mmssss(Math.floor(e.currentPosition)).split(':')[1],
    );
  });
}, []);
const onStopRecording = React.useCallback(async () => {
  setIsRecording(false);
  await audioRecorderPlayer.stopRecorder();
  audioRecorderPlayer.removeRecordBackListener();
}, []);

解决方案

1. 配置iOS权限

在iOS项目的Info.plist中添加麦克风权限描述,iOS会直接拒绝未声明权限的录音请求:

<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风进行录音操作</string>

2. 修正路径与错误捕获

确保路径语法正确,同时在录音启动逻辑中添加错误捕获,便于定位具体问题:

const onStartRecording = React.useCallback(async () => {
  setIsRecording(true);
  try {
    await audioRecorderPlayer.startRecorder(path);
    audioRecorderPlayer.addRecordBackListener(e => {
      const timeStr = audioRecorderPlayer.mmssss(Math.floor(e.currentPosition));
      setRecordingTime(timeStr.split(':').slice(0, 2).join(':'));
    });
  } catch (err) {
    console.error('录音初始化失败:', err);
    setIsRecording(false);
  }
}, [path]);

3. 主动请求麦克风权限

iOS需要用户主动授权麦克风权限,可在启动录音前先检查并请求权限:

import { check, request, PERMISSIONS, RESULTS } from 'react-native-permissions';

const checkMicrophonePermission = async () => {
  const status = await check(PERMISSIONS.IOS.MICROPHONE);
  if (status === RESULTS.DENIED) {
    const reqStatus = await request(PERMISSIONS.IOS.MICROPHONE);
    return reqStatus === RESULTS.GRANTED;
  }
  return status === RESULTS.GRANTED;
};

// 更新录音启动函数
const onStartRecording = React.useCallback(async () => {
  const hasPermission = await checkMicrophonePermission();
  if (!hasPermission) {
    console.log('麦克风权限未授权,无法启动录音');
    return;
  }
  setIsRecording(true);
  try {
    await audioRecorderPlayer.startRecorder(path);
    audioRecorderPlayer.addRecordBackListener(e => {
      const timeStr = audioRecorderPlayer.mmssss(Math.floor(e.currentPosition));
      setRecordingTime(timeStr.split(':').slice(0, 2).join(':'));
    });
  } catch (err) {
    console.error('录音初始化失败:', err);
    setIsRecording(false);
  }
}, [path]);

4. 升级依赖版本

react-native-audio-recorder-player 3.5.3可能存在iOS 16兼容性问题,尝试升级到最新稳定版:

npm install react-native-audio-recorder-player@latest

5. 重置iOS模拟器

若仅模拟器出现问题,可尝试重置模拟器:

  1. 打开模拟器,点击顶部菜单栏Hardware
  2. 选择Erase All Content and Settings
  3. 重启模拟器后重新运行项目

内容的提问来源于stack exchange,提问作者Elia Kassouf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:25:39