我正在尝试制作录音机。当我点击录音按钮时,它会给出错误 致命异议:主要 处理: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();
}
});
}
}
答案 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
,这明确表示会导致抛出异常。