Record Audio with MediaRecorder in Android 8 goes crash

28 Views Asked by At

Im using this class to create AudioRecorder

interface IAudioRecorder {
    fun start(outputFile: File)
    fun stop()
}
class AudioRecorder(private val context: Context) : IAudioRecorder {
    private var recorder: MediaRecorder? = null
    private fun createRecorder(): MediaRecorder {
        return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) MediaRecorder(context) else MediaRecorder()
    }

    override fun start(outputFile: File) {
        createRecorder().apply {
            setAudioSource(MediaRecorder.AudioSource.MIC)
            setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP)
            setOutputFile(FileOutputStream(outputFile).fd)
            setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB)
           prepare()
           start()

           recorder = this
        }
    }

    override fun stop() {
        recorder?.stop()
        recorder?.reset()
        recorder?.release()
        recorder = null
    }
}

in this class i want to record audio but just in device with android 8 goes crash with start() another device with android 11 its works , the main problem is i want to save this audio into storage with my path : 'MyFolder/Audio Folder/' but in samsung with andoird 8 not works and gets crash when i want to start recording

gives me this error

start failed: -38
java.lang.IllegalStateException
at android.media.MediaRecorder._start(Native Method)
at android.media.MediaRecorder.start(MediaRecorder.java:1370)
at com.MyPackage.core.utils.audio.AudioRecorder.start(AudioRecorder.kt:33)
at com.MyPackage.core.ui.dialog.audio.AudioDialog.startRecord(AudioDialog.kt:85)
at com.MyPackage.core.ui.dialog.audio.AudioDialog.onStart(AudioDialog.kt:79)
at androidx.fragment.app.Fragment.performStart(Fragment.java:3162)
at androidx.fragment.app.FragmentStateManager.start(FragmentStateManager.java:588)
at androidx.fragment.app.FragmentStateManager.moveToExpectedState(FragmentStateManager.java:279)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1899)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1823)
at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1760)
at androidx.fragment.app.FragmentManager$5.run(FragmentManager.java:547)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:7000)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:441)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1408)

i get all perimisson with TedPermisson , befor showing dialog AuidoRecorder: RECORD_AUDIO, WRITE_EXTERNAL_STORAGE

another things is i created camera recorder in another fragment, but this work perfect and save the video into the my folder correctly but the dialogAuidoRecorder gets crashes!!

I need to record audio and save it into my path in storage`

0

There are 0 best solutions below