WindSekirun / NaraeAudioRecorder

AudioRecorder for Android powered by Kotlin
Apache License 2.0
91 stars 20 forks source link

crash when stop #18

Open fukemy opened 3 years ago

fukemy commented 3 years ago

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

WindSekirun commented 3 years ago

@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