2012-02-17 12 views
2

私はこの作業コードを持っています。限られた時間だけ録音する必要があります。これはどうすればいいですか?Androidオーディオの録音時間を自動的に制限する方法はありますか?

MediaRecorder recorder = new MediaRecorder(); 
File outputFile = new File(file); 
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(outputFile.getAbsolutePath()); 
try { 
    recorder.prepare(); 
} catch (IllegalStateException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
recorder.start(); 
recorder.setMaxDuration(60000); 
// stop 
recorder.stop(); 
recorder.reset(); 
recorder.release(); 

答えて

0

あなたはなど、)(あなたのrecorder.stopを置くべきは、ここでタイマー

に呼び出すだけ追加http://developer.android.com/resources/articles/timed-ui-updates.html

Timer timer = new Timer(); 
timer.schedule(new FinishRecordingTask(), 100, 200); 

タイマータスクを使用する方法について説明へのリンクですこれはあなたがrecorder.start()を呼び出した後です

1

これはほとんど厄介なアプローチかもしれません。しかし、あなたはmediaplayer.start(とあなたのMediaPlayerを起動したら、これは

thread passMusic=new Thread(new Runnable() { 

     public void run() { 
      try { 

       Thread.sleep(60000); 
       mediaplayer.pause(); 
       mediaplayer.stop(); 
       mediaplayer.release(); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 


     } 
    });passMusic.start(); 

、このようなことにスレッド並列を開始し、)、私が何をしたか

ですそして今、あなたはあなたのUIを更新するためのハンドラを使用することができますか何か。

+0

これを実際にwoliuの回答と組み合わせて使用​​するのはすばらしいアプローチです。彼の答えは録音を制限しますが、あなたの答えは、それが完了したことをユーザーに知らせるための良い解決策です。例えば、時間制限の後にトーストを出すことができます。ありがとう!アクティビティ( 'Thread'ではなく)を通して' Toast'をポストしなければなりませんが、これは別の問題です。 – Azurespot

2

これはよくやっただろう:UIをnotifingためのコールバックを取得するために

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(outputFile.getAbsolutePath()); 

recorder.setMaxDuration(60000); 
recorder.prepare(); 
recorder.start(); 
+0

ありがとう、これは動作します...しかし、他の人が知っているように、理想的には、知らないので録音が停止したことをユーザーに知らせるために何かが必要になります。しかし、作成されたファイルを見ると、割り当てられる秒数は限られています。ほんとありがと。 – Azurespot

0

使用setMaxDurationsetOnInfoListenerを(前に機能を開始/準備setMaxDurationを使用します)。

recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
recorder.setOutputFile(outputFile.getAbsolutePath()); 

recorder.setMaxDuration(60000); 
recorder.prepare(); 
recorder.setOnInfoListener(new MediaRecorder.OnInfoListener() { 
    @Override 
    public void onInfo(MediaRecorder mr, int what, int extra) { 
     if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED){ 
      Toast.makeText(context, "Recording stops. Limit reached", Toast.LENGTH_LONG).show(); 
     } 
    } 
}); 
recorder.start(); 
関連する問題