2013-06-18 55 views
0

我有一个简单的类来记录声音,记录后播放文件播放它:暂停播放记录在android系统

public class MainActivity extends Activity 
{ 
    private static final String LOG_TAG = "AudioRecordTest"; 
    private static String mFileName = null; 

    private MediaRecorder mRecorder = null; 
    private Button startRecord, startPlaying, stopPlaying; 
    private MediaPlayer mPlayer = null; 

    private void onRecord(boolean start) { 
     if (start) { 
      startRecording(); 
     } else { 
      stopRecording(); 
     } 
    } 

    private void onPlay(boolean start) { 
     if (start) { 
      startPlaying(); 
     } else { 
      //stopPlaying(); 
      pausePlaying(); 
     } 
    } 

    private void startPlaying() { 
     mPlayer = new MediaPlayer(); 
     try { 
      mPlayer.setDataSource(mFileName); 
      mPlayer.prepare(); 
      mPlayer.start(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 
    } 

    private void stopPlaying() { 
     mPlayer.release(); 
     mPlayer = null; 
    } 

    private void pausePlaying(){ 
     mPlayer.stop(); 
    } 

    private void startRecording() { 
     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setOutputFile(mFileName); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

     try { 
      mRecorder.prepare(); 
     } catch (IOException e) { 
      Log.e(LOG_TAG, "prepare() failed"); 
     } 

     mRecorder.start(); 
    } 

    private void stopRecording() { 
     mRecorder.stop(); 
     mRecorder.release(); 
     mRecorder = null; 
    } 



    public MainActivity() { 
     mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
     mFileName += "/audiorecordtest.3gp"; 
    } 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 

     setContentView(R.layout.activity_main); 

     startPlaying = (Button) findViewById(R.id.buttonStartPlay); 
     stopPlaying = (Button) findViewById(R.id.buttonStopPlaying); 
     startRecord = (Button) findViewById(R.id.buttonStartRecord); 

     startRecord.setOnClickListener(new OnClickListener() { 
      boolean mStartRecording = true; 
      @Override 
      public void onClick(View v) { 
       onRecord(mStartRecording); 
       if (mStartRecording) { 
        startRecord.setText("Stop recording"); 
       } else { 
        startRecord.setText("Start recording"); 
       } 
       mStartRecording = !mStartRecording; 

      } 
     });  

     startPlaying.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onPlay(true); 

      } 
     }); 

     stopPlaying.setOnClickListener(new OnClickListener() { 
      boolean mStartPlaying = true; 
      @Override 
      public void onClick(View v) { 
       onPlay(false); 

      } 
     }); 

    } 

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

     if (mPlayer != null) { 
      mPlayer.release(); 
      mPlayer = null; 
     } 
    } 
} 

我知道我可以暂停,但我不知道我怎么能再次运行文件但从我暂停我的文件的那一刻起。有任何想法吗?

+0

u能请告知。你遵循了哪个程序暂停? – Sam

+0

方法“pausePlaying”是我暂停播放的方法 – edi233

回答

2

更改此:

private void pausePlaying(){ 
      mPlayer.stop(); 
     } 

要:

private void pausePlaying(){ 
      if(mPlayer.isPlaying()){ 
       mPlayer.pause(); 
      } else { 
       mPlayer.start(); 
      } 
    } 
1

请勿使用.stop()暂停。在MediaPlayer API中,您可以看到.pause()将是最佳选择。如果重组

mPlayer.setDataSource(mFileName); 
    mPlayer.prepare(); 

要在onCreate方法发生,你能避免它每次都重新设置。 看看他们图http://i.stack.imgur.com/svHrq.gif