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

时间:2017-10-06 05:20:05

标签: android onclicklistener ontouchlistener ontouchevent android-audiorecord

此问题已被提出,但我无法找到我的解决方案。

我正在做的是MotionEvent.ACTION_DOWN OnTouchListener我开始录制音频,而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);
}

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

2 个答案:

答案 0 :(得分:3)

检查这个答案 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;
     }

答案 1 :(得分:0)

如下所示。

width