android - 强制 MediaRecorder 使用内部麦克风

标签 android android-mediarecorder

我正在使用类似这样的东西来启动录音:

MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile("/dev/null");
recorder.prepare();
recorder.start();

我想一直用内置麦克风录音。使用上面的代码,音频源会在插入外部麦克风后立即切换到外部麦克风。我查看了文档,但找不到设置首选麦克风的方法。

最佳答案

不幸的是,你试图违背 Android 的音频管理,即系统根据所选音频源选择输入设备,当插入耳机时,输入,对于 MIC 音频源,切换到耳机.您可以通过检查 logcat 的 AudioPolicyManager 的相关消息来确认这一点。

我的建议是使用不同的音频源来欺骗系统。我建议使用 CAMCORDER或者,至少尝试使用 VOICE_RECOGNITION 或 VOICE_COMMUNICATION。

CAMCORDER 的主要问题是它可以使用多媒体麦克风,也就是设备背面的那个。更详细地说,我会建议以下程序:

  1. 监听 ACTION_HEADSET_PLUG Intent 。
  2. 收到 Intent 后,尝试将音频源切换为 CAMCORDER。
  3. 根据 Activity 摄像头选择 CAMCORDER 音频源,因此您可以尝试通过 MediaREcorder 的 setCamera 强制使用前置摄像头(然后是前置内置麦克风)。

希望对你有帮助

关于android - 强制 MediaRecorder 使用内部麦克风,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19815850/

相关文章:

android - 在 android 中不工作的相机之间切换

android - SQLite 数据库 : Create multiple tables dynamically at runtime?

android - 相对布局问题

android - 跟踪 android apk 下载源(不是来自 Google play)

android - 如何在 Android 中流式传输时动态更改 MediaCodec 编码比特率?

android - 无法在android中播放从LocalSocket接收到的视频

java - 通过 Twitter4j 检查我在关注谁

android - Exoplayer 为 android 中的大型 mp4 文件抛出解码器初始化异常

Android Mediarecorder 录制的视频时长与预期时长不同

Android 媒体记录器 - "start failed: -19"