如何使用/不使用MediaPlayer获取Duration()

时间:2013-10-08 07:59:41

标签: android android-fragments

我的ViewPager中有两个片段。第一个片段列出了所有可用的mp3文件,第二个片段实际播放(实现了MediaPlayer逻辑)。

在我的第一个片段中,我想列出mp3文件的持续时间。因为所有mp3文件都是从媒体文件加载的,所以如何获取文件的持续时间?

我尝试了以下内容:

初始声明:

MediaPlayer mediaPlayer;

代码实施:

mediaPlayer.setDataSource(mp3URL);
totalDuration = utils.milliSecondsToTimer(mediaPlayer.getDuration());

MilliSecondsToTimermilliseconds字符串转换为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中提取总持续时间?请帮助。

2 个答案:

答案 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());
  }
});