NaraeAudioRecorder
NaraeAudioRecorder copied to clipboard
crash when stop
hi, i got crash when stop record, using the example here is the log
2021-04-14 02:02:20.531 9281-9281/com.github.windsekirun.naraeaudiorecorder.sample E/NaraeAudioRecorder: stop() called on an uninitialized AudioRecord.
2021-04-14 02:02:20.534 9281-9281/com.github.windsekirun.naraeaudiorecorder.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.github.windsekirun.naraeaudiorecorder.sample, PID: 9281
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:606)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: java.io.FileNotFoundException: /storage/emulated/0/NaraeAudioRecorder/2021-04-14 02:02:14.mp3: open failed: EPERM (Operation not permitted)
at libcore.io.IoBridge.open(IoBridge.java:492)
at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder$outputStream$2.invoke(DefaultAudioRecorder.kt:18)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder$outputStream$2.invoke(DefaultAudioRecorder.kt:13)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder.getOutputStream(Unknown Source:7)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder.stopRecording(DefaultAudioRecorder.kt:56)
at com.github.windsekirun.naraeaudiorecorder.recorder.WavAudioRecorder.stopRecording(WavAudioRecorder.kt:15)
at com.github.windsekirun.naraeaudiorecorder.ffmpeg.FFmpegAudioRecorder.stopRecording(FFmpegAudioRecorder.kt:41)
at com.github.windsekirun.naraeaudiorecorder.NaraeAudioRecorder.stopRecording(NaraeAudioRecorder.kt:105)
at com.github.windsekirun.naraeaudiorecorder.sample.MainActivity.clickStop(MainActivity.kt:143)
at com.github.windsekirun.naraeaudiorecorder.sample.databinding.MainActivityBindingImpl$OnClickListenerImpl1.onClick(MainActivityBindingImpl.java:320)
at android.view.View.performClick(View.java:8160)
at android.widget.TextView.performClick(TextView.java:16219)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Caused by: android.system.ErrnoException: open failed: EPERM (Operation not permitted)
at libcore.io.Linux.open(Native Method)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:254)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:8367)
at libcore.io.IoBridge.open(IoBridge.java:478)
at java.io.FileOutputStream.<init>(FileOutputStream.java:236)
at java.io.FileOutputStream.<init>(FileOutputStream.java:186)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder$outputStream$2.invoke(DefaultAudioRecorder.kt:18)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder$outputStream$2.invoke(DefaultAudioRecorder.kt:13)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder.getOutputStream(Unknown Source:7)
at com.github.windsekirun.naraeaudiorecorder.recorder.DefaultAudioRecorder.stopRecording(DefaultAudioRecorder.kt:56)
at com.github.windsekirun.naraeaudiorecorder.recorder.WavAudioRecorder.stopRecording(WavAudioRecorder.kt:15)
at com.github.windsekirun.naraeaudiorecorder.ffmpeg.FFmpegAudioRecorder.stopRecording(FFmpegAudioRecorder.kt:41)
at com.github.windsekirun.naraeaudiorecorder.NaraeAudioRecorder.stopRecording(NaraeAudioRecorder.kt:105)
at com.github.windsekirun.naraeaudiorecorder.sample.MainActivity.clickStop(MainActivity.kt:143)
at com.github.windsekirun.naraeaudiorecorder.sample.databinding.MainActivityBindingImpl$OnClickListenerImpl1.onClick(MainActivityBindingImpl.java:320)
at android.view.View.performClick(View.java:8160)
at android.widget.TextView.performClick(TextView.java:16219)
at android.view.View.performClickInternal(View.java:8137)
at android.view.View.access$3700(View.java:888)
at android.view.View$PerformClick.run(View.java:30236)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8506)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
android 11
@fukemy
I think this issue is related to 'scoped storage' because sample application saves audio file into external storage.
Instead Environment.getExternalStorageDirectory(), use context.getExternalFilesDir(null) will solve this issue.
I'll change some code when free time