私は Android プログラミングの初心者です。
私のアクティビティから、これを行う Asynctask を起動します。
onPreExecute(): AudioRecord をセットアップし、録音の準備を整えます
doInBackground():
while (!isCancelled()) {
try
{
shortsRead = recorder.read(intputbuffer,0,size);
if (shortsRead <= 0) {
Log.e("AudioRead", "Audioread failed buffersize tried:" + " Sizeread:" + shortsRead);
recorder.stop();
recorder.release();
Thread.sleep(500);
int bufferSizeInBytes = 4096 * 2;
recorder = new AudioRecord(AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
recorder.startRecording();
}
}
catch(Throwable x)
{
Log.w("Audio", "Error reading voice audio", x);
}
}
recorder.stop();
recorder.release();
Log.i("Audio", "Killed Audio Thread");
構成を変更すると (向きを切り替える)、onDestroy (asynctask をキャンセル) が実行され、次に onCreate が立て続けに実行されます。
私が信じているのは、以前の Asynctask がまだ実行中であり、時間内にキャンセルできず、onCreate が新しいものを作成することです。新しいものは、以前の asynctask によって既に取得されているため、マイクを取得できません。
これをきれいにするために私にできることはありますか?
私android:configChanges="keyboardHidden|orientation"
は AndroidManifest.xml で使用しようとしましたが、私が読んだところ、問題はまだ残っています...向きの変更でマスクされているだけです。