2016-07-28 8 views
0

30 Sekunden automatischen Audio-Clip erstellen Ich arbeite an einem Nebenprojekt für Spaß gelegentlichen GebrauchWie in Android mit Java

In android Studio Ich versuche, einen Button-Klick zu implementieren, die ein automatisches 30 Sekunden Audio beginnt Aufzeichnung, dass der Benutzer in diesem Zeitraum alles tun oder sagen kann.

Nachdem der Clip hat es fertig Auto spielt zurück und gibt die Möglichkeit, direkt an das Gerät gestartet

Ich habe noch nicht zu speichern oder zu laden, war ich neugierig, was bestimmte Methoden in der API sollte i mal reinschauen ???

Jeder Rat wäre erstaunlich, danke.

Antwort

0

versuchen, etwas wie folgt aus:

private MediaRecorder mMediaRecorder; 
private static final long UPDATE_INTERVAL = 100; 
private Sync mSync; 
private boolean mIsRecording = false; 
private long mStartTime = 0; 
private long mStopTime = 0; 
private String mFileName; 

private void startRecord() { 
    startRecording(); 
    mSync = new Sync(new Runnable() { 

     @Override 
     public void run() { 
      if (!mIsRecording||!isAdded()) 
       return; 
      long currentTime = System.currentTimeMillis(); 
      if (currentTime-mStartTime>AppConstants.MAX_RECORD_DURATION_S*1000){ 
       stopRecord(); 
       updateLayoutVisibility(); 
       return;         
      } 
      String str = getString(R.string.recording_template,(currentTime-mStartTime)/1000,AppConstants.MAX_RECORD_DURATION_S); 
      mTextSeconds.setText(str); 
      mSync.next(); 
     } 
    },UPDATE_INTERVAL); 
    mSync.now(); 
    mLayoutButtonsStartRecord.setVisibility(View.GONE); 
    mLayoutButtonsRecord.setVisibility(View.VISIBLE); 
} 


private void stopRecord() { 
    mSync.stop(); 
    mIsRecording = false; 
    mStopTime = System.currentTimeMillis(); 
    mMediaRecorder.stop(); 
    mMediaRecorder.release(); 
    mMediaRecorder = null;  
} 

private void startRecording() { 
    if (mMediaRecorder != null) { 
     mMediaRecorder.release(); 
    } 
    mFileName = getTempRecordFileName(); 
    if (mFileName==null){ 
     dismiss(); 
     return; 
    } 
    mIsRecording = true; 
    mMediaRecorder = new MediaRecorder(); 
    mMediaRecorder.setAudioSource(AudioSource.MIC); 
    mMediaRecorder.setOutputFormat(OutputFormat.MPEG_4); 
    mMediaRecorder.setAudioEncoder(AudioEncoder.AAC); 
    mMediaRecorder.setAudioChannels(1); 

    mMediaRecorder.setOutputFile(mFileName); 
    try { 
     mMediaRecorder.prepare(); 
     mMediaRecorder.start(); 
     mStartTime = System.currentTimeMillis(); 
    } catch (IOException e) { 
     Toast.makeText(getActivity(), 
       R.string.error_failed_start_recording, Toast.LENGTH_LONG) 
       .show(); 
     Log.d(TAG, "Failed start recorder", e); 
     mMediaRecorder.release(); 
     mMediaRecorder = null; 
     dismiss(); 
     return; 
    } 
} 

private class Sync{ 
    private Handler handler = new Handler(); 
    private Runnable task; 
    private long period; 

    public Sync(Runnable task,long period){ 
     this.task = task; 
     this.period = period; 
     handler.removeCallbacks(task); 
    } 
    public void now(){ 
     task.run(); 
    } 

    public void next(){ 
     handler.postDelayed(task, period); 
    } 
    public void stop(){ 
     handler.removeCallbacks(task); 
    } 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    if (mMediaRecorder != null) { 
     mMediaRecorder.release(); 
     mMediaRecorder = null; 
    } 
    if (mSync!=null){ 
     mSync.stop(); 
    } 

}