录音机启动失败:-38

16

我搜索了一下,确认这个问题不是重复的,发现有些问题还没有答案,有些回答也没有帮到我。

这是我的代码:

private void startRecording()
{
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
              mFileName += "/recordedHeckPost_.3gp";

            mRecorder.setOutputFile(mFileName);                  

                try {
                    mRecorder.prepare();
                    //Thread.sleep(2000);
                    mRecorder.start();                  
        }
                catch (InterruptedException e) 
                {   // TODO Auto-generated catch block
            e.printStackTrace();
        }     
            catch(IllegalStateException e)
            {
                e.printStackTrace();
            } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
}

private void stopRecording()
{
        mRecorder.stop();
        mRecorder.release();
        mRecorder = null;
}
在 Nexus 5 上运行此代码后,我收到以下启动失败-38异常的消息:
05-31 18:17:39.404: E/MediaRecorder(2464): start failed: -38
05-31 18:17:39.404: W/System.err(2464): java.lang.IllegalStateException
05-31 18:17:39.404: W/System.err(2464):     at android.media.MediaRecorder.start(Native Method)

谢谢。

2个回答

25

找到了解决方案,看起来我后台运行了一些其他的服务,它们正在使用AudioRecord并且也在使用麦克风...这就是为什么会出现-38的原因 :)


这是特定的哪个后台服务? - Vinay Gaba
2
这是我的一个应用程序服务,而不是操作系统。 - Robocide
1
找到了!从另一个我测试过的应用程序,我隐藏了它的图标!该死的,如果没有关于后台其他服务的答案,我永远不会意识到这一点。谢谢! - Vinay Gaba
我该如何查找正在后台运行用于录音或使用麦克风的其他服务? - SRam
只需检查您的应用程序源代码中是否有字符串“AudioRecord”或“MediaRecorder”,或者其他方法来查找是否有使用麦克风的代码。 - Robocide
你有没有找到解决方法,可以在不移除后台服务的情况下修复这个问题?我正在使用https://github.com/JorenSix/TarsosDSP来检测录制视频时麦克风的音高。所以你能帮我解决这个问题吗? - hasan_shaikh

0
在我的情况下,当我在关闭第一个相机时忘记释放MediaRecorder时,切换到第二个相机后出现了错误(MediaRecorder:start failed:-38)。
mediaRecorder?.release()
mediaRecorder = null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接