2011-03-28 85 views
12

我有一個mp3文件,我想播放一個特定的單詞。我有一個開始時間(6889 ms)和結束時間(7254 ms)。Android:如何在播放特定毫秒時停止播放媒體(mp3)?

我有這些代碼:

package com.example.playword; 

import java.io.IOException; 
import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.widget.TextView; 

public class PlayWord extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final TextView tv = new TextView(this); 

    tv.setText("Playing..."); 
    setContentView(tv); 

    final MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.nicholas); 

    try { 
     mPlayer.prepare(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    mPlayer.seekTo(6889); //this is the start time 
    mPlayer.start(); 
    //how can I end it at 7254 ms? 
    } 
} 

回答

8

最好的方法是使用一個處理程序的時間播放的停止。啓動播放器,然後使用處理程序的postDelayed安排執行Runnable以停止播放器。只有在初始搜索完成後,您才應該啓動播放器。事情是這樣的:

public class PlayWord extends Activity implements MediaPlayer.OnSeekCompleteListener { 
    Handler mHandler; 
    MediaPlayer mPlayer; 
    int mStartTime = 6889; 
    int mEndTime = 7254; 
    final Runnable mStopAction = new Runnable() { 
     @Override 
     public void run() { 
      mPlayer.stop(); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  
     final TextView tv = new TextView(this); 
     tv.setText("Playing..."); 
     setContentView(tv); 
     mHandler = new Handler(); 
     mPlayer = MediaPlayer.create(this, R.raw.nicholas); 
     mPlayer.setOnSeekCompleteListener(this); 
     mPlayer.seekTo(mStartTime); 
    } 

    @Override 
    public void onDestroy() { 
     mPlayer.release(); 
    } 

    @Override 
    public void onSeekComplete (MediaPlayer mp) { 
     mPlayer.start(); 
     mHandler.postDelayed(mStopAction, mEndTime - mStartTime); 
    } 
} 

還要注意MediaPlayer.create方法使用的是回報率已經被準備和prepare應該再次就像你在你的code.on做屏幕稱爲MediaPlayer的。當活動退出時,我還添加了對release()的呼叫。

此外,如果要在完成搜索時更新UI,請注意,此方法通常是從非UI線程調用的。您必須使用處理程序發佈任何與UI相關的操作。

0
In Oncreate Method ,use the below 4 lines code: 


    MediaPlayer mPlayer = MediaPlayer.create(this, R.raw.nicholas); 
    mPlayer.start(); 
    mPlayer.seekTo(startTime); 
    updatePlayerPostion(); 


private Handler handler=new Handler(){ 

      @Override 
      public void handleMessage(Message msg) { 
         // TODO Auto-generated method stub 
         super.handleMessage(msg); 
         updatePlayerPostion(); 
       } 
      }; 
      updatePlayerPostion() 
      { 
       handler.removeCallbacks(r); 
       if(player.getCurrentPosition==7254) 

       player.stop(); 


      else 
       handler.postDelayed(r, 1); //1 millisecond 

      } 
     Runnable r=new Runnable(){ 
     @Override 
       public void run() { 
        // TODO Auto-generated method stub 
        updatePlayerPostion() 
       } 
     };