媒体录制器崩溃

huangapple 未分类评论45阅读模式
英文:

MediaRecorder Crashing

问题

MediaRecorder在将输出文件设置为自定义目录时导致我的应用崩溃。如果我将其设置为Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC),它完全正常工作。

我的代码:

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setAudioEncodingBitRate(16*44100);
recorder.setAudioSamplingRate(44100);
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/My App/Voice/", new Date().getTime() + ".3gp");
recorder.setOutputFile(file.getAbsoluteFile());

我确保麦克风以及存储权限的读写权限都已被允许。非常感谢任何帮助。

编辑:

错误日志:

E/MediaRecorder: stop called in an invalid state: 4
E/InputEventReceiver: Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.IllegalStateException
        at android.media.MediaRecorder._stop(Native Method)
        at android.media.MediaRecorder.stop(MediaRecorder.java:1378)
        ...

(错误日志的其余部分未翻译)

英文:

MediaRecorder is crashing my app when I set the output file to a custom directory. If I set it to

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC) , it works completely fine.

My Code:

                    recorder = new MediaRecorder();
                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    recorder.setAudioEncodingBitRate(16*44100);
                    recorder.setAudioSamplingRate(44100);
                    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC)
                    file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/My App/Voice/", new Date().getTime() + ".3gp");
                    recorder.setOutputFile(file.getAbsoluteFile());

I made sure that my microphone as well as my reading and writing in storage permissions are allowed. Any help would be appreciated.

Edit:

Error Log:

E/MediaRecorder: stop called in an invalid state: 4
E/InputEventReceiver: Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.IllegalStateException
        at android.media.MediaRecorder._stop(Native Method)
        at android.media.MediaRecorder.stop(MediaRecorder.java:1378)
        at com.example.criminalscurse.Home$6.onTouch(Home.java:328)
        at android.view.View.dispatchTouchEvent(View.java:13480)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:697)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1879)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3487)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:655)
        at android.view.View.dispatchPointerEvent(View.java:13732)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6131)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5909)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5358)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5411)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5377)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5536)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5385)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5593)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5358)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5411)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5377)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5385)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5358)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8420)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8353)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8306)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8535)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:198)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
        at android.os.Looper.loop(Looper.java:181)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.criminalscurse, PID: 5259
    java.lang.IllegalStateException
        at android.media.MediaRecorder._stop(Native Method)
        at android.media.MediaRecorder.stop(MediaRecorder.java:1378)
        at com.example.criminalscurse.Home$6.onTouch(Home.java:328)
        at android.view.View.dispatchTouchEvent(View.java:13480)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3222)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2904)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:697)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1879)
        at android.app.Activity.dispatchTouchEvent(Activity.java:3487)
        at androidx.appcompat.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:69)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:655)
        at android.view.View.dispatchPointerEvent(View.java:13732)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6131)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:5909)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5358)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5411)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5377)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5536)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5385)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5593)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5358)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5411)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5377)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5385)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5358)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8420)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8353)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8306)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:8535)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:198)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:326)
        at android.os.Looper.loop(Looper.java:181)
        at android.app.ActivityThread.main(ActivityThread.java:7050)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

答案1

得分: 0

尝试看看这是否有帮助:

                    recorder = new MediaRecorder();
                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    recorder.setAudioEncodingBitRate(16*44100);
                    recorder.setAudioSamplingRate(44100);
                    file = new File(Environment.getExternalStorageDirectory(),"MyApp" + File.separator + "Voice", new Date().getTime() + ".3gp");
                    
                    recorder.setOutputFile(file.getAbsolutePath());
英文:

Try whether this helps

                    recorder = new MediaRecorder();
                    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    recorder.setAudioEncodingBitRate(16*44100);
                    recorder.setAudioSamplingRate(44100);
                    file = new File(Environment.getExternalStorageDirectory(),"MyApp"+File.seperator+"Voice", new Date().getTime() + ".3gp");

                    
                    recorder.setOutputFile(file.getAbsoluteFile());

huangapple
  • 本文由 发表于 2020年7月26日 18:25:23
  • 转载请务必保留本文链接:https://java.coder-hub.com/63098894.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定