Android:如何在播放特定毫秒时停止播放媒体(mp3)?

问题描述:

我有一个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? 
    } 
} 

最好的方法是使用一个处理程序的时间播放的停止。启动播放器,然后使用处理程序的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相关的操作。

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() 
       } 
     };