录音机错误

时间:2016-01-27 11:22:31

标签: android audio recorder

我正在尝试制作录音机。当我点击录音按钮时,它会给出错误         致命异议:主要                                                    处理:rishabh.agarwal.holmes.recorder,PID:22175                                                    java.lang.IllegalStateException                                                        在android.media.MediaRecorder.setOutputFormat(本机方法)                                                        在rishabh.agarwal.holmes.recorder.MainActivity $ 2.onClick(MainActivity.java:47)

这是我的代码

public class MainActivity extends AppCompatActivity {

Button btnPlay,btnRec,btnStop;
MediaRecorder mr;
String fname;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fname=Environment.getExternalStorageDirectory()+"/myrec1.3gp";
    btnPlay=(Button)findViewById(R.id.button1);
    btnRec=(Button)findViewById(R.id.button2);
    btnStop=(Button)findViewById(R.id.button3);
    btnPlay.setEnabled(false);
    btnStop.setEnabled(false);
    btnPlay.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View v) {


        }
    });

    btnRec.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mr = new MediaRecorder();
            mr.setOutputFile(fname);
            mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mr.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            mr.setAudioSource(MediaRecorder.AudioSource.MIC);
            try {
                mr.prepare();
            } catch (IllegalStateException e) {

                e.printStackTrace();
               // Toast.makeText(MainActivity.this, e.toString(), 5).show();
            } catch (IOException e) {
                // TODO Auto-generated catch block
               // Toast.makeText(MainActivity.this, e.toString(), 5).show();
                e.printStackTrace();
            }
            mr.start();
            btnRec.setEnabled(false);
            btnStop.setEnabled(true);
        }
    });

    btnStop.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mr.release();
            mr.stop();

        }
    });
}

}

4 个答案:

答案 0 :(得分:0)

尝试删除此行

mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

答案 1 :(得分:0)

试试这个: -

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);             recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

答案 2 :(得分:0)

您忘记将权限放入清单文件中。在清单文件中写下以下代码。

 <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

答案 3 :(得分:0)

  

android.media.MediaRecorder.setOutputFormat中的java.lang.IllegalStateException

查看the documentation我们发现:

  

public void setOutputFormat (int output_format)

     

<强>抛出
  IllegalStateException 如果在prepare()后面调用,或者在setAudioSource() / setVideoSource()之前调用

在您的代码中,您在setOutputFormat之前调用setAudioSource,这明确表示会导致抛出异常。