学習用のオーディオ録音を実装しようとしていますが、例外が発生し、これを解決する方法が明確にわからずにアプリがクラッシュしました。これが私のコードです
private static final File SDCARD_ROOT = Environment.getExternalStorageDirectory();
private static final String APP_DIR = "test_audio";
private static final String AUDIO_SAMPLE_NAME = "myShake";
...............
...............
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
appDir = new File(SDCARD_ROOT, APP_DIR);
if (!appDir.exists()) {
appDir.mkdir();
}
recordButton = (Button) findViewById(R.id.audio_button);
textView = (TextView) findViewById(R.id.edit_text);
recordButton.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(final View view, final MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
record();
return true;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
return true;
} else {
return false;
}
}
});
}
private void record() {
final File audioSampleFile = new File(appDir, AUDIO_SAMPLE_NAME);
if (audioSampleFile.exists()) {
audioSampleFile.delete();
}
if (mediaRecorder == null) {
mediaRecorder = new MediaRecorder();
}
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(audioSampleFile.getPath());
mediaRecorder.start();
}
以下は、電話でアプリケーションがクラッシュした後に発生する例外です
03-20 07:08:59.272: ERROR/NotificationService(243): Ignoring notification with icon==0: Notification(contentView=null vibrate=null,sound=nullnull,defaults=0x0,flags=0x62)
03-20 07:09:04.007: ERROR/MediaRecorder(7156): start called in an invalid state: 4
03-20 07:09:04.017: ERROR/AndroidRuntime(7156): FATAL EXCEPTION: main
java.lang.IllegalStateException
at android.media.MediaRecorder._start(Native Method)
at android.media.MediaRecorder.start(MediaRecorder.java:712)
at com.cs.gang.TestAudio.record(TestAudio.java:78)
ここで、TestAudio.java:78は行です
mediaRecorder.start();
他の投稿でこの問題を検索しましたが、まったく同じではないようです。許可があります
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
SDカードにもアクセスするためのファイルを正しく作成したと思いますので、この問題やエラーの原因は何でしょうか?ありがとう