Я новичок в программировании для Android.
Из моей деятельности я запускаю асинтаск, который делает это:
onPreExecute(): настраивает AudioRecord и готовит его к записи.
сделать в фоновом режиме():
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 (отменяет асинхронную задачу), а затем быстро последовательно onCreate.
Я считаю, что предыдущая асинтаска все еще работает и не может быть отменена вовремя, а onCreate создает новую. Новый не может добраться до микрофона, потому что он уже занят моей предыдущей асинтаской.
Есть ли что-то, что я могу сделать, чтобы сделать это чисто?
Я пытался использовать android:configChanges="keyboardHidden|orientation"
в AndroidManifest.xml, но из того, что я читал, проблема все еще существует... она просто маскируется при изменении ориентации.