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模拟器
若仅模拟器出现问题,可尝试重置模拟器:
- 打开模拟器,点击顶部菜单栏
Hardware - 选择
Erase All Content and Settings - 重启模拟器后重新运行项目
内容的提问来源于stack exchange,提问作者Elia Kassouf
相关产品推荐
相关产品推荐

