我的ViewPager中有两个片段。第一个片段列出了所有可用的mp3文件,第二个片段实际播放(实现了MediaPlayer逻辑)。
在我的第一个片段中,我想列出mp3文件的持续时间。因为所有mp3文件都是从媒体文件加载的,所以如何获取文件的持续时间?
我尝试了以下内容:
初始声明:
MediaPlayer mediaPlayer;
代码实施:
mediaPlayer.setDataSource(mp3URL);
totalDuration = utils.milliSecondsToTimer(mediaPlayer.getDuration());
MilliSecondsToTimer
将milliseconds
字符串转换为3:40
格式。
最终申请:
duration.setText(totalDuration);
这样做会给我带来以下错误:
10-08 03:38:03.341: E/MediaPlayer(2586): Attempt to call getDuration without a valid mediaplayer
10-08 03:38:03.361: E/MediaPlayer(2586): error (-38, 0)
10-08 03:38:03.461: E/MediaPlayer(2586): Error (-38,0)
如何从URL中提取总持续时间?请帮助。
答案 0 :(得分:0)
您可能在文件完全加载之前调用getDuration。看看这个问题的解决方案是否适合你。
final VideoView video = (VideoView) findViewById(R.id.videoplayer);
final MediaController controller = new MediaController(this);
video.setVideoURI(Uri.parse(getIntent().getStringExtra("url")));
video.setMediaController(controller);
controller.setMediaPlayer(video);
video.setOnPreparedListener(new OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
int duration = video.getDuration();
video.requestFocus();
video.start();
controller.show();
}
});
答案 1 :(得分:0)
您正准备在准备工作完成前获取mediaPlayer.getDuration()
。使用setOnPreparedListener()
方法设置准备监听器,并在准备完成后调用getDuration()
方法。
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
totalDuration = utils.milliSecondsToTimer(mediaPlayer.getDuration());
}
});