0

이 질문은 이미 요청되었지만 해결책을 찾지 못했습니다.setOnTouchListener에서 오디오를 녹음하려고 할 때 응용 프로그램이 충돌합니다.

내가 뭘하는지, MotionEvent.ACTION_DOWNOnTouchListener 나는 오디오 녹음을 시작했고 MotionEvent.ACTION_UP 나는 오디오 녹음을 중단했다.

아이콘이 길면 잘 작동하지만 onclick 앱이 충돌합니다. I 앱이

+4

여기에 오류 로그를 게시하십시오. – UltimateDevil

+0

java.lang.RuntimeException : 중지에 실패했습니다. android.media.MediaRecorder.stop (네이티브 메소드) – manjari

+0

친절하게도 전체 logcat을 넣고 onclick onTouch를 누르면 ActionDown이 호출되는지 확인하고 ActionUp도 호출되는지 확인합니다. –

답변

3

확인이 답변 Android mediarecorder stop failed 하고 또한 mediaRecorder 및 상태에 대한 offical 한 설명서를 참조하십시오. 레코딩 상태가 아닌 미디어 플레이어와 미디어 플레이어를 중지하면 충돌이 발생합니다. 레코딩 상태가 아닌 경우 donot call stop이 직접 중지됩니다.

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

고맙습니다. 이 시도 잡기 블록 해결 된 응용 프로그램을 해결. – manjari

+0

방금 ​​버튼을 클릭했을 때 축배를 보여줄 방법을 말해 줄 수 있습니까? 오랫동안 언론에 녹음됩니다. – manjari

+1

괜찮아졌습니다. – manjari

0

은 아래와 같이 할 충돌되는 버튼을 클릭하고 때 여기, 여기 내

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); 
} 

내 문제가 있습니다.

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