我正在尝试开发一个简单的安卓音频recorder.Everything构建良好,它也可以在安卓设备上运行良好。似乎我可以开始录制,但是当我想要停止它时,会抛出一个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;
}
}
我想用以下命令来触发它:
新建vr = VoiceRecorder 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
但是当我调用stop时:
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)
发布于 2012-09-06 21:23:27
问题不在于停止,而在于启动。它不能正确启动,这就是为什么你不能稍后停止它的原因。
检查几件事: a)您添加了persmission android.permission.RECORD_AUDIO
b)您写入SD卡(我不确定这是必需的,但我相信我在写入内部存储器时遇到问题)。您需要权限才能写入SD卡。
c)另外,尝试设置onErrorListener http://developer.android.com/reference/android/media/MediaPlayer.html#setOnErrorListener(android.media.MediaPlayer.OnErrorListener
d)在我建议阅读这篇文章之前,尝试在任何其他调用之前重置() MediaPlayer,http://developer.android.com/reference/android/media/MediaPlayer.html#Valid_and_Invalid_States安卓的MediaRecorder状态是噩梦。
发布于 2012-09-06 21:15:19
当您从无效状态调用stop()时,似乎抛出了这个错误。
记录器的活动周期似乎还表明您需要准备()它,然后才能开始记录-您正在这样做吗?除非记录器至少已准备好,否则stop()不是有效命令。
如果是这样,可能需要一段时间让记录器真正处于有效状态,然后才能调用stop()。您将在start()之后立即调用它,因此可能发生了一些事情。
https://stackoverflow.com/questions/12308365
复制相似问题