Android MediaRecorder启动方法调用中的IllegalStateException

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.

我的应用程序尝试使用MediaRecorder API录制声音。我的开始录制方法如下所示:

   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,它是一个空设备,所有东西都会被丢弃。参考:你有任何代码来解决这个问题吗?