【问题标题】:android - MediaRecorder throws illegalstateexceptionandroid - MediaRecorder 抛出非法状态异常
【发布时间】:2012-10-05 19:15:56
【问题描述】:

我正在尝试开发一个简单的 android 录音机。一切正常,并且在 android 设备上也可以正常运行。似乎我可以开始录制,但是当我想停止录制时,它会抛出 IllegalStateException。我找不到错误。代码如下:

public class VoiceRecorder {
MediaRecorder recorder= new MediaRecorder();
static Context cont;

public void startRecord(Context context) throws IllegalStateException, IOException{
    cont = context;

    recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
    recorder.setOutputFile(cont.getFilesDir()+"/recordings.3gp"); 
    recorder.prepare();
    recorder.start();  

 }  
public void stopRecording(Context context) {
    cont = context;
    recorder.stop();
    recorder.release();
    File file = new File (cont.getFilesDir()+"/recordings.3gp");
    UploadFile.uploadFile("recordings.3gp", file);
    recorder = null;
 }
}

我想触发它​​:

VoiceRecorder vr = new VoiceRecorder();

vr.startRecord(续);

vr.stopRecording(续);

当调用 start Logcat 时说:(应该没问题)

09-06 22:56:42.830: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0
09-06 22:56:42.840: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.850: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001
09-06 22:56:42.850: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.860: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001
09-06 22:56:42.870: D/AudioFlinger(123): setParameters(): io 3, keyvalue routing=262144;vr_mode=0, tid 156, calling tid 123
09-06 22:56:42.870: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.880: D/AudioHardwareMSM72XX(123): audpre_index = 0, tx_iir_index = 0
09-06 22:56:42.880: D/HTC Acoustic(123): msm72xx_enable_audpre: 0x0000
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): do input routing device 40000
09-06 22:56:42.880: I/AudioHardwareMSM72XX(123): Routing audio to Speakerphone
09-06 22:56:42.890: D/HTC Acoustic(123): msm72xx_enable_audpp: 0x0001

但是当我调用停止时:

09-06 22:59:52.440: E/MediaRecorder(1069): stop called in an invalid state: 1
09-06 22:59:52.440: W/System.err(1069): java.lang.IllegalStateException
09-06 22:59:52.460: W/System.err(1069):     at android.media.MediaRecorder.stop(Native Method)
09-06 22:59:52.460: W/System.err(1069):     at de.spyapp.VoiceRecorder.stopRecording(VoiceRecorder.java:33)
09-06 22:59:52.460: W/System.err(1069):     at de.spyapp.CheckCMD.checkCMD(CheckCMD.java:30)
09-06 22:59:52.460: W/System.err(1069):     at de.spyapp.AppActivity$2.run(AppActivity.java:44)
09-06 22:59:52.460: W/System.err(1069):     at java.lang.Thread.run(Thread.java:1096)

【问题讨论】:

    标签: android mediarecorder illegalstateexception


    【解决方案1】:

    问题不在于停止,而在于开始。它没有正确启动,这就是为什么你以后不能停止它。

    检查几件事: a) 你添加了权限 android.permission.RECORD_AUDIO

    b)您写入 SD 卡(我不确定这是必需的,但我相信我在写入内部存储器时遇到了问题)。您需要获得写入 SD 卡的权限。

    c) 另外,尝试设置 onErrorListener http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener)

    d) 尝试在任何其他调用之前 reset() MediaPlayer 我建议阅读这篇文章 http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States Android 的 MediaRecorder 状态是噩梦。

    【讨论】:

    • 所有权限都可以。我尝试更改为 sd 卡并在 startrecording 方法开始时进行了重置。现在 logcat 告诉我 .start() 上的新内容:09-06 23:34:20.310: D/audio_input(123): DoStop: X 09-06 23:34:20.330: D/audio_input(123): DoReset: E 09-06 23:34:20.340:D/audio_input(123):DoReset:X 09-06 23:34:20.340:E/audio_input(123):不支持的参数:x-pvmf/media-input-node/cap- config-interface;valtype=key_specific_value 09-06 23:34:20.340: E/audio_input(123): VerifyAndSetParameter failed
    【解决方案2】:

    当您从无效状态调用 stop() 时似乎会引发该错误。

    记录器的活动周期似乎也表明您需要在开始记录之前准备()它 - 您正在这样做吗?除非至少准备好记录器,否则 stop() 不是有效的命令。

    如果是这样,那么记录器可能需要一段时间才能真正稳定在有效状态,然后才能稍后调用 stop()。您在 start() 之后立即调用它,所以那里可能正在发生一些事情。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多