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`