[英]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.