AudioCaptureSample icon indicating copy to clipboard operation
AudioCaptureSample copied to clipboard

AudioRecord not initializing on android 11 when app is in background

Open Prasad-03 opened this issue 4 years ago • 0 comments

I have been implementing this functionality to record audio playbacks played on the device.

It is working fine when my app is in foreground, and I am getting pretty fine audio recordings, but it is throwing the below error whenever my app goes to background.

I have implemented this as a service and starting this service from another service which is a foreground service. I have tried all of the configuration for audioFormat but audioRecord object is failing to initialize.

Below is the function where app is crashed at run time.

private final void startAudioCapture() {

AudioPlaybackCaptureConfiguration config = new AudioPlaybackCaptureConfiguration.Builder(mediaProjection)
        .addMatchingUsage(AudioAttributes.USAGE_MEDIA)
        .build();

AudioFormat audioFormat = new AudioFormat.Builder()
        .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
        .setSampleRate(8000)
        .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
        .build();

if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
    return;
}
int bufferSize = AudioRecord.getMinBufferSize(8000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
audioRecord = new AudioRecord.Builder()
        .setAudioFormat(audioFormat)
        .setBufferSizeInBytes(bufferSize)
        .setAudioPlaybackCaptureConfig(config)
        .build();
audioRecord.startRecording();
audioCaptureThread = new Thread() {
    @Override
    public void run() {
        File outputFile = createAudioFile();
        writeAudioToFile(outputFile);
    }
};

audioCaptureThread.start();
mIsRecording = true;

} Errors:- E/IAudioFlinger: createRecord returned error -1 E/AudioRecord: createRecord_l(1): AudioFlinger could not create record track, status: -1 E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1. E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.Myapp.app.internal, PID: 18240 java.lang.RuntimeException: Unable to start service com.Myapp.app.AudioService@bfz0813 with Intent { act=AudioService:Start cmp=com.Myapp.app.internal/com.Myapp.app.AudioService }: java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.

Note:- This works perfect for all android version less than 11.

Prasad-03 avatar Feb 24 '22 13:02 Prasad-03