Android 16的麦克风问题

移动开发 2026-07-09

问题

我正在使用 react-native-audio-recorder-player 来处理React Native语音SDK中的麦克风开启/关闭。

在Android 16上,首次麦克风会话能够正常工作,但如果我快速多次启动/停止录音器,麦克风会话最终在经过2–3次循环后无法初始化。

示例:

await audioRecorderPlayer.startRecorder()
await audioRecorderPlayer.stopRecorder()

await audioRecorderPlayer.startRecorder()
await audioRecorderPlayer.stopRecorder()

await audioRecorderPlayer.startRecorder() // eventually fails

重要细节

这不是权限问题。

  • RECORD_AUDIO权限已授予
  • 第一次初始化总是成功
  • 失败仅在快速反复开启/关闭循环后发生

观察到的行为

  • 仅在Android 16上可重现
  • 在重新打开前等待几秒通常能解决
  • 看起来本地音频资源在下一次初始化前没有被完全释放
  • 有时 startRecorder() 会挂起,或在多次循环后未能正确初始化

问题

  1. Android 16是否改变了AudioRecord的释放/重新初始化时序?
  2. react-native-audio-recorder-player 是否已知对快速重启录音器存在问题?
  3. stopRecorder()startRecorder() 之间是否有推荐的延迟/去抖动?
  4. 是否应将录音器的start/stop调用串行化以避免原生端的竞态条件?

当前流程

const start = async () => {
  await audioRecorderPlayer.startRecorder()
}

const stop = async () => {
  await audioRecorderPlayer.stopRecorder()
}

快速连续调用 startRecorder()stopRecorder() 最终会在Android 16上导致麦克风初始化失败。

是否有开发者在新版Android上遇到过与 react-native-audio-recorder-player 或AudioRecord相关的类似问题?

解决方案

嗯...

react-native-audio-recorder-player 似乎已经正式弃用并归档,因此不会有修复。维护者已转向 react-native-nitro-sound See here 作为替代。你可能会在这里找到需要修复的部分。

如果你现在不能迁移,在stopRecorder() 之后再调用startRecorder() 之前增加大约 ~300ms的延迟,可能有助于解决Android 16上的释放阶段竞态条件——但这只是一个权宜之计,并非真正的修复。

这可能作为一个变通方案。

const stop = async () => {
  await audioRecorderPlayer.stopRecorder();
  await new Promise(res => setTimeout(res, 300));
};

迁移可能是这里更干净、也更合适的方案。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章