繁体   English   中英

如何使用Android MediaPlayer在毫秒范围内播放mp3文件?

[英]How to play an mp3 file between a range of milliseconds using android MediaPlayer?

我可以使用android的MediaPlayer对象播放mp3文件。 但是我想在毫秒范围内播放,例如在30000 ms到40000 ms之间(仅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) {
    }
}

任何帮助是极大的赞赏。 谢谢!

您可以使用以下方法:

public int getCurrentPosition ()

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

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

使用完媒体文件后,请不要忘记释放它:

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

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

最好的方法是使用Handler来定时停止播放。 启动播放器,然后使用Handler的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 应该叫再喜欢你在你的code.on屏幕做。 活动结束时,我还添加了对release()的调用。

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


我从以下站点复制了此文件: Android:如何在特定的毫秒数到来时停止播放媒体(mp3)?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM