Mediarecorder выдает исключение, если старт-стоп происходит быстроAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Mediarecorder выдает исключение, если старт-стоп происходит быстро

Сообщение Anonymous »

У меня есть Mediarecorder, подключенный к кнопке, где я записываю, пока кнопка нажата, и останавливается, когда кнопка отпускается. Код работает нормально:

Код: Выделить всё

            mediaRecorder = new MediaRecorder();
mediaRecorder.Reset();
mediaRecorder.SetAudioSource(AudioSource.Mic);
mediaRecorder.SetOutputFormat(OutputFormat.AacAdts);
mediaRecorder.SetAudioEncoder(AudioEncoder.Aac);
mediaRecorder.SetAudioSamplingRate(16000);
mediaRecorder.SetOutputFile(storagePath);

mediaRecorder.Prepare();
mediaRecorder.Start();
Однако я обнаружил, что пользователи не знают, что кнопку нужно держать нажатой, поэтому они просто нажимают кнопку, что приводит к срабатыванию mediaRecorder.Stop(). выполнить относительно быстро. Это вызывает исключение:

Код: Выделить всё

Java.Lang.RuntimeException: stop failed.
at Java.Interop.JniEnvironment.InstanceMethods.CallVoidMethod(JniObjectReference instance, JniMethodInfo method, JniArgumentValue* args) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/obj/Release/net7.0/JniEnvironment.g.cs:line 20370
at Java.Interop.JniPeerMembers.JniInstanceMethods.InvokeVirtualVoidMethod(String encodedMember, IJavaPeerable self, JniArgumentValue* parameters) in /Users/runner/work/1/s/xamarin-android/external/Java.Interop/src/Java.Interop/Java.Interop/JniPeerMembers.JniInstanceMethods_Invoke.cs:line 66
at Android.Media.MediaRecorder.Stop() in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/obj/Release/net8.0/android-34/mcw/Android.Media.MediaRecorder.cs:line 2477
Я также могу смоделировать эту ошибку, синхронно выполнив подготовку, запуск и остановку. Однако я не понимаю, почему выдается исключение, потому что подготовка, запуск и остановка должны выполняться один за другим после выполнения каждой строки - поэтому теоретически подготовка и запуск завершаются до того, как достигается остановка.mediaRecorder.Prepare();
mediaRecorder.Start();
mediaRecorder.Stop();
У MediaPlayer есть событие OnPrepared, которое Я могу подключиться, чтобы убедиться, что подготовка завершена. С другой стороны, MediaRecorder, к сожалению, не имеет такого события.
Как мне избежать этой проблемы с помощью функции «Остановить выдачу исключения»?

Подробнее здесь: https://stackoverflow.com/questions/790 ... op-quickly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»