Skip to content

Android app crashes when recording a second time with error "startRecording() called on an uninitialized AudioRecord" #186

@a8k2hf64

Description

@a8k2hf64

Android app crashes when recording a second time with error "startRecording() called on an uninitialized AudioRecord".

I am developing a .NET9 MAUI app with audio recording and playback capabilities. I have followed the examples and instructions in the documentation. I'm not allowed to post the exact code per business policy.

Plugin version: 4.0.0
.NET version: 9
Android emulator details: Android 16 API 36
Android physical device details: Android 14 API 34

I am using builder.AddAudio() in MauiProgram.cs. I am using dependency injection in my View Model

builder.AddAudio();
builder.Services.AddTransient<MyViewModel>();

...


private readonly IAudioManager audioManager;
private readonly IAudioRecorder audioRecorder;


public MyViewModel(IAudioManager audioManager) {
    this.audioManager = audioManager;
    audioRecorder = audioManager.CreateRecorder();
}

[RelayCommand]
private async Task StartRecording() {
    var microphoneAllowed = [getting microphone permission]
    if (microphoneAllowed) {
        await audioRecorder.StartAsync();
    }
}

[RelayCommand]
private async Task StopRecording() {
    RecordedAudio = await audioRecorder.StopAsync();
}

[RelayCommand]
private async Task Replay() {
    if (RecordedAudio != null) {
        await using (var stream = RecordedAudio.GetAudioStream()) {
            var player = AudioManager.Current.CreateAsyncPlayer(stream);
            await player.PlayAsync(CancellationToken.None);
        }
    }
}

My AndroidManifest includes :

<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

The first time this code gets run, everything works as expected. I get prompted to give microphone permissions. Recording works. Stopping works. Playback works. However, after stopping the audio, regardless of if I playback or not, the second time I try to record audio (re-recording), the app crashes. In the code above, I'm calling CreateRecorder() in the constructor, but the issue still occurs if I move that call to be within StartRecording() as well. The errors are:

java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
at android.media.AudioRecord.startRecording(AudioRecord.java: 1494)
at crc64fcf28c0e24b4cc31.ButtonHandler_ButtonClickListener.n_onClick(Native Method)
at crc64fcf28c0e24b4cc31.ButtonHandler_ButtonClickListener.onClick(ButtonHandler_ButtonClickListener.java:29)
at android.view.View.performClick(View.java:8083)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java: 1218)
at android.view.View.performClickInternal(View.java:8060)
at android.view.View .- $$Nest$mperformClickInternal(Unknown Source:0)
at android.view.View$PerformClick.run(View.java:31532)
at android.os.Handler.handleCallback(Handler.java:995)
at android.os.Handler.dispatchMessage(Handler.java: 103)
at android.os.Looper.loopOnce(Looper.java:248)
at android.os.Looper.loop(Looper.java:338)
at android.app.ActivityThread.main(ActivityThread.java:8982)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Runtimelnit$MethodAndArgsCaller.run(Runtimelnit.java:593)
at com.android.internal.os.Zygotelnit.main(Zygotelnit.java:932)

FATAL EXCEPTION: main
Error code -20 when initializing native AudioRecord object.
Error creating AudioRecord instance: initialization check failed with status -1.
createRecord_I(0): AudioFlinger could not create record track, status: -1
AudioFlinger Function: createRecord Line: 2423 Failed result (Status(-1, EX SECURITY): 'static BinderResult com :: android :: media :: permission :: ValidatedAttributionSourceState :: createFromTrustedUidNoPackage(AttributionSourceState,...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions