【问题标题】:Android: How to stop media (mp3) in playing when specific milliseconds come?Android:如何在特定毫秒到来时停止播放媒体(mp3)?
【发布时间】:2011-03-28 03:46:12
【问题描述】:

我有一个 mp3 文件,我想在其中播放特定的单词。我有一个开始时间 (6889 ms) 和结束时间 (7254 ms)。

我有这些代码:

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?
  }
}

【问题讨论】:

    标签: android media-player


    【解决方案1】:

    最好的方法是使用处理程序来计时停止播放。启动播放器,然后使用处理程序的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 方法返回一个已经准备好的MediaPlayer,并且prepare 应该不 再次调用,就像您在屏幕上的代码中所做的那样。当活动退出时,我还添加了对release() 的调用。

    此外,如果您想在搜索完成时更新 UI,请注意此方法通常是从非 UI 线程调用的。您必须使用处理程序发布任何与 UI 相关的操作。

    【讨论】:

      【解决方案2】:
      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()
                      }
              };
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多