我正在使用 Expo 和 React Native 开发一个跨平台应用程序,针对 iOS 和 Android。我的目标是即使在应用程序处于后台或设备屏幕锁定时也能继续录音。我更喜欢找到一种避免弹出和处理本机代码自定义的解决方案。
目前,我使用 expo-av 来实现基本的录音功能,但没有任何后台服务实现:
import { Audio } from 'expo-av';
const startRecording = async () => {
await Audio.setAudioModeAsync({
allowsRecordingIOS: true,
playsInSilentModeIOS: true,
staysActiveInBackground: true,
interruptionModeIOS: InterruptionModeIOS.DoNotMix,
shouldDuckAndroid: true,
interruptionModeAndroid: InterruptionModeAndroid.DoNotMix,
playThroughEarpieceAndroid: false,
});
const { recording } = await Audio.Recording.createAsync(
Audio.RecordingOptionsPresets.HIGH_QUALITY
);
await recording.startAsync();
};
const stopRecording = async (recording) => {
await recording.stopAndUnloadAsync();
return recording.getURI();
};
我了解基本要求,例如为 iOS 添加后台模式和为 Android 使用前台服务。但是,我正在寻找有关可在 Expo 环境中处理这些任务的维护包或包组合的指导。
我已经尝试了几个库来在 Expo 的托管工作流程中启用后台录音,但到目前为止还没有找到满足所有要求的解决方案。
问题:
我希望找到一种解决方案,可以利用 Expo 中的现有工具和库,而无需求助于自定义本机实现。任何意见或建议将不胜感激。
提前谢谢您!
对于 Ios,您需要通过添加来更新您的 infoPlist
infoPlist: {
NSMicrophoneUsageDescription:
"The app records ...",
UIBackgroundModes: ["audio"],
}
到你的config.ios