0

この質問は既に尋ねられていますが、解決策を見つけることができません。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:停止に失敗しました。 android.media.MediaRecorder.stop(ネイティブメソッド) – manjari

+0

親切に、完全なlogcatを入れて、onclick onTouchを押すとActionDownと呼ばれ、ActionUpも呼び出されることを確認します。 –

答えて

3

この回答 Android mediarecorder stop failed を確認し、またmediaRecorderとその状態についての公式ドキュメントを読んでください。 録画中でないメディアプレーヤーとメディアプレーヤーを停止したためにクラッシュします。 録画中でない場合は、直接donotコールを停止します。

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

ありがとうございます。このtry catchブロックはアプリのクラッシュを解決しました。 – manjari

+0

ボタンをクリックするだけでトーストを表示する方法を教えてもらえますか?オーディオは長時間押されて録音されますか? – manjari

+1

これは正常に機能しました – manjari

0

は、以下のように行うクラッシュされたボタンをクリックしていたときに、私の問題です。

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

関連する問題