Android MediaRecorder启动方法调用中的IllegalStateException
我的应用程序尝试使用MediaRecorder API录制声音。我的开始录制方法如下所示:Android MediaRecorder启动方法调用中的IllegalStateException,android,illegalstateexception,android-mediarecorder,mediarecorder-api,Android,Illegalstateexception,Android Mediarecorder,Mediarecorder Api,我的应用程序尝试使用MediaRecorder API录制声音。我的开始录制方法如下所示: public void start() { if(this.mRecorder == null) { try{ this.mRecorder = new MediaRecorder(); this.mRecorder.setAudioSource(1); this.
public void start() {
if(this.mRecorder == null) {
try{
this.mRecorder = new MediaRecorder();
this.mRecorder.setAudioSource(1);
this.mRecorder.setOutputFormat(1);
this.mRecorder.setAudioEncoder(1);
this.mRecorder.setOutputFile("/dev/null");
} catch (RuntimeException re) {
}
try {
this.mRecorder.prepare();
} catch (IllegalStateException var3) {
var3.printStackTrace();
} catch (IOException var4) {
var4.printStackTrace();
}
this.mRecorder.start();
this.mEMA = 0.0D;
}
}
但我从以下行的用户那里得到了崩溃报告:
this.mRecorder.start();
IllegalStateException堆栈跟踪为:
java.lang.RuntimeException:
atandroid.app.ActivityThread.performResumeActivity(ActivityThread.java:3493)
atandroid.app.ActivityThread.handleResumeActivity(ActivityThread.java:3533)
atandroid.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2791)
atandroid.app.ActivityThread.-wrap12(ActivityThread.java)
atandroid.app.ActivityThread$H.handleMessage(ActivityThread.java:1532)
atandroid.os.Handler.dispatchMessage(Handler.java:102)
atandroid.os.Looper.loop(Looper.java:163)
atandroid.app.ActivityThread.main(ActivityThread.java:6342)
atjava.lang.reflect.Method.invoke(NativeMethod)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:880)
atcom.android.internal.os.ZygoteInit.mai(ZygoteInit.java:770)
Causedby:java.lang.IllegalStateException:
atandroid.media.MediaRecorder.start(NativeMethod)
atmeasure.sound.decibels.SoundMeter.start(SoundMeter.java:43)
atmeasure.sound.decibels.MyActivity.start(MyActivity.java:138)
atmeasure.sound.decibels.MyActivity.onResume(MyActivity.java:521)
atandroid.app.Instrumentation.callActivityOnResume(Instrumentation.java:1270)
atandroid.app.Activity.performResume(Activity.java:6960)
atandroid.app.ActivityThread.performResumeActivity(ActivityThread.java:3470)
应用程序正在为用户崩溃。任何帮助
atmeasure.sound.decibels.SoundMeter.start(SoundMeter.java:43)
SoundMeter.java:43的确切行是什么?您能否尝试调用this.mRecorder.start()代码>在“准备后重试”中?我猜是prepare()
正在抛出一个被捕获的异常,因此在播放器准备好之前您将调用start确保您在清单中定义了适当的权限。只要查看文档,prepare()
方法就会在输出文件无效时抛出一个IOException
。我不确定/dev/null
是否为有效文件?这证明了我的第一条评论,所以要修正它,你需要一个有效的file@riadrifai我的是一个声音测量应用程序,所以我不需要实际存储录音。我只需要测量声音中的分贝,所以我正在写/dev/null,它是一个空设备,所有东西都会被丢弃。参考:你有任何代码来解决这个问题吗?