Аз съм сравнително нов в програмирането с 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 прави нова. Новият не може да стигне до микрофона, защото вече е зает от моята предишна асинхронна задача.
Има ли нещо, което мога да направя, за да направя това чисто?
Опитах да използвам android:configChanges="keyboardHidden|orientation"
в AndroidManifest.xml, но от това, което прочетох, проблемът все още е налице... просто е маскиран при промяна на ориентацията.