【发布时间】:2012-06-07 14:54:26
【问题描述】:
我正在制作一个允许用户录制音频并将其保存在 SD 卡中某处的应用程序。我正在使用 MediaRecorder 来录制音频。
我正在重用 androiddevblog 网站上的一些代码,因为 stackoverflow 上的另一个用户推荐它来检查这些教程。
我的问题是,每当我单击按钮录制音频时,我都会收到一条错误消息,提示“您的应用程序已被强制停止”。我用调试器发现是因为我在recorder.stop()上有一个非法状态异常
我知道根据我的代码不会记录任何内容。我想首先确保文件被创建并保存。
我之前发布了这个问题,并解决了我原来的问题,但后来遇到了这个问题。所以它可能看起来是重复的。
public class MyRecorderActivity extends Activity{
private static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";
private static final String AUDIO_RECORDER_FILE_EXT_3GP = ".3gp"
private Button audio;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.questionandanswer);
....
....
audio = (Button) findViewById(R.id.audio_recordactivity);
audio.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startRecording();
}
});
}
private String getFilename(){
String filepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(filepath,AUDIO_RECORDER_FOLDER);
if(!file.exists()){
file.mkdirs();
}
return (file.getAbsolutePath()+ "/ " + System.currentTimeMillis() + AUDIO_RECORDER_FILE_EXT_3GP);
}
private void startRecording(){
MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(getFilename());
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
recorder.stop();
recorder.reset();
recorder.release();
}
}
【问题讨论】:
标签: android android-sdcard android-sdk-2.3 illegalstateexception android-mediarecorder