尝试在setOnTouchListener上录制音频时,应用程序崩溃

问题描述:

此问题已被问到,但无法找到我的解决方案。尝试在setOnTouchListener上录制音频时,应用程序崩溃

我在做什么,MotionEvent.ACTION_DOWNOnTouchListener我开始录制音频,并在MotionEvent.ACTION_UP我停止录音。

长时间触摸该图标时,它工作正常,但onclick应用程序崩溃。 这里是我的

audio.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(Chat.this, "You Have to hold the Button for audio recording.", Toast.LENGTH_LONG).show(); 
     } 
    }); 

audio.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       MediaRecorderReady(); 
       try { 
        mediaRecorder.prepare(); 
        mediaRecorder.start(); 
       } catch (IllegalStateException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       if (mediaRecorder != null) { 
        mediaRecorder.stop(); 
       } 
      } 
      return true; 
     } 
    }); 

public void MediaRecorderReady() { 
    mediaRecorder = new MediaRecorder(); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
    mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
    mediaRecorder.setOutputFile(AudioSavePathInDevice); 
} 

这里是我的问题,当我点击该按钮的应用程序崩溃

+4

在此处发布错误日志 – UltimateDevil

+0

java.lang.RuntimeException:stop failed。在android.media.MediaRecorder.stop(本地方法) – manjari

+0

请将完整的logcat和检查,当你按onclick onTouch称为ActionDown和ActionUp也被称为。 –

检查这个答案 Android mediarecorder stop failed 也阅读mediaRecorder及其状态的官方文档。 https://developer.android.com/reference/android/media/MediaRecorder.html 由于您停止媒体播放器和媒体播放器未处于录制状态而导致崩溃。 未处于录制状态时无法直接呼叫停止。

try { 
    mRecorder.stop(); 
    } 
    catch(RuntimeException e) { 
    } 
     finally { 
       mRecorder.release(); 
       mRecorder = null; 
    } 
+0

谢谢。这个尝试catch块解决了崩溃的应用程序。 – manjari

+0

你可以告诉我如何显示烤面包,当我只点击按钮和音频将长时间按下记录? – manjari

+1

这工作得很好 – manjari

做像下面。

private MediaRecorder myAudioRecorder; 
    private MediaPlayer mPlayer; 

audio.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      if (event.getAction() == MotionEvent.ACTION_DOWN) { 
       initializeRecorder();     
       recordFile(); 

      } else if (event.getAction() == MotionEvent.ACTION_UP) { 
       stopRecording(); 
      } 
      return true; 
     } 
    }); 

private void initializeRecorder() { 
     File cacheDir = new File(Utils.SD_CARD, Utils.RECORDING_CACHE); 
     if (!(cacheDir.exists())) { 
      cacheDir.mkdirs(); 
     } 

     outputFile = cacheDir + "/" + String.format("%s.m4a", System.currentTimeMillis()); 

     mPlayer = new MediaPlayer(); 
     myAudioRecorder = new MediaRecorder(); 
     myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 

     //original 
     myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
     myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); 
     myAudioRecorder.setOutputFile(outputFile); 

    } 

private void recordFile() { 
     try { 
      myAudioRecorder.prepare(); 
      myAudioRecorder.start(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

private void stopRecording(){ 
    myAudioRecorder.stop(); 
    myAudioRecorder.release(); 
} 
+0

我的代码工作正常,当我长时间触摸,然后删除 – manjari

+0

然后是什么问题? –

+0

当我刚刚触摸音频按钮,然后应用程序崩溃。长按并释放音频录音良好 – manjari