ユーザーがオーディオを録音してSDカードのどこかに保存できるアプリケーションを作成しています。MediaRecorder を使用してオーディオを録音しています。
これらのチュートリアルを確認するために、stackoverflow で別のユーザーから推奨された androiddevblog Web サイトのコードの一部を再利用しています。
私の問題は、ボタンをクリックしてオーディオを録音するたびに、「アプリケーションは強制的に停止されました」というエラーが表示されることです。デバッガーを使用して、recorder.stop() に illegalStateException があるためであることを確認しました。
私のコードに基づいて何も記録されないことを認識しています。最初に、ファイルが作成されて保存されることを確認したいと思います。
以前にこの質問を投稿し、元の問題を解決しましたが、後でこの問題に遭遇しました。そのため、重複しているように見える場合があります。
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();
}
}