【问题标题】:Android Studio. App crashes when only clicking button/imageview with onTouchListener安卓工作室。仅使用 onTouchListener 单击按钮/图像视图时应用程序崩溃
【发布时间】:2018-08-03 06:56:22
【问题描述】:

您好,我正在开发一个可以跟踪每个用户位置的应用程序,作为其中的一部分,该应用程序可以在将语音消息发送到 mysql 服务器之前录制语音消息。 当用户按住录制按钮/图像视图时,该应用程序很好并且正在运行。但是当一些用户只点击按钮/图像视图而不按住它来录制他们的声音时会崩溃。

如何防止此应用崩溃?如果用户只单击按钮并发出警告但不使应用程序崩溃,我该如何处理。谢谢

mFileName = Environment.getExternalStorageDirectory() + "/"+user_id+".3gp";
        recordBtn.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {


                if(checkPermissionFromDevice()){

                    if(event.getAction() == MotionEvent.ACTION_DOWN){
                        startRecording();
                        recordLabel.setText("Recording Started...");
                    }else if(event.getAction() == MotionEvent.ACTION_UP){
                        stopRecording();
                        recordLabel.setText("Recording Stoped...");
                    }

                }
                else{
                    requestPermission();
                }
                return false;
            }
        });


    }

Logcat:

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: www.teamruby.com.capstoneproject, PID: 3679
    java.lang.RuntimeException: stop failed.
        at android.media.MediaRecorder.stop(Native Method)
        at www.teamruby.com.capstoneproject.INeedHelp.stopRecording(INeedHelp.java:383)
        at www.teamruby.com.capstoneproject.INeedHelp.access$300(INeedHelp.java:69)
        at www.teamruby.com.capstoneproject.INeedHelp$3.onTouch(INeedHelp.java:194)
        at android.view.View.dispatchTouchEvent(View.java:9290)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254)
        at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737)
        at android.app.Activity.dispatchTouchEvent(Activity.java:2765)
        at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:68)
        at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364)
        at android.view.View.dispatchPointerEvent(View.java:9514)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5922)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5896)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5857)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:6025)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(Me

【问题讨论】:

  • 我认为你的错误在于stopRecording() 方法。可以发一下吗?
  • 我认为这是当用户只点击按钮时,因为如果用户按住按钮代码工作正常。 `私人无效停止记录(){ mRecorder.stop(); mRecorder.release(); mRecorder = null; } '

标签: java android mediarecorder


【解决方案1】:

我认为错误确实发生了,因为用户立即开始录制并过早停止,所以媒体录制器可能在它开始之前就停止了,因为它说 MediaRecorder.stop 失败。目前一个简单的解决方案是将其包装在 try catch 中,如果发生错误,则显示您的警告 toast,如下所示:

try {
    stopRecording();
} catch(RunTimeException e) {
    e.printstack();
    //your toast
}

【讨论】:

  • 该代码确实有效。该应用程序现在工作正常。其他链接了解更多信息:[stackoverflow.com/questions/16221866/…Thanks Mr.O
  • 任何时候 :),您可能应该更改问题,以便人们更容易找到它。
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 2018-11-13
  • 2013-02-24
  • 1970-01-01
相关资源
最近更新 更多