如何使用android MediaPlayer在一系列毫秒之间播放mp3文件?

时间:2014-10-14 20:46:44

标签: android audio mp3 media-player android-mediaplayer

我可以使用android的MediaPlayer对象播放mp3文件。但我想在毫秒范围内播放,例如在30000毫秒到40000毫秒之间(仅10秒)。我怎样才能做到这一点?

目前,以下代码就是我所拥有的,

private MediaPlayer mPlayer;
public void play() {
    try {
        mPlayer = MediaPlayer.create(getApplicationContext(), R.raw.mp3_file);
        if (mPlayer != null) {
            int currentPosition = mPlayer.getCurrentPosition();
            if (currentPosition + 30000 <= mPlayer.getDuration()) {
                mPlayer.seekTo(currentPosition + 30000);
            } else {
                mPlayer.seekTo(mPlayer.getDuration());
            }
            mPlayer.start();
        }
    }
    catch(Exception e) {
    }
}

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用以下方法:

public int getCurrentPosition ()

获取当前时间,以milSeconds为单位,可能在每1000 milSeconds运行一次的Handler中并测试以查看:

if(mPlayer.getCurrentPosition() >= (mPlayer.getDuration + 40000));

当您使用它时,请不要忘记release媒体文件:

public void release();
mPlayer.release();
  

释放与此MediaPlayer对象关联的资源。它是   当你完成使用时,我们认为这是一种很好的做法   MediaPlayer。特别是,每当一个应用程序的活动   暂停(调用其onPause()方法)或停止(其onStop()   方法被调用),应该调用此方法来释放   MediaPlayer对象,除非应用程序有特殊需要保留   周围的物体。除了不必要的资源(如   正在保持的内存和编解码器实例,无法调用它   如果不再需要MediaPlayer对象,可以立即使用方法   也导致移动设备的持续电池消耗,以及   如果没有多个实例,则其他应用程序的播放失败   设备支持相同的编解码器。即使是多个实例   支持相同的编解码器,可能会有一些性能下降   当不必要的多个实例同时使用时   时间。

答案 1 :(得分:0)

最好的方法是使用处理程序来停止播放的时间。启动播放器,然后使用处理程序的MonsterEater来安排执行将停止播放器的from flask.ext.cors import CORS .... CORS(app) 。您也应该在初始搜索完成后启动播放器。像这样:

postDelayed

另请注意,您使用的Runnable方法会返回已准备好的MediaPlayer,而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的调用。

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

我是从Android: How to stop media (mp3) in playing when specific milliseconds come?

复制的