0

我的 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 中提取总持续时间?请帮忙。

4

2 回答 2

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();

                   }
               });
于 2013-10-08T08:01:59.717 回答
0

你试图mediaPlayer.getDuration()在准备完成之前得到。使用该setOnPreparedListener()方法设置准备监听getDuration()器,只有在准备完成后才调用该方法。

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  public void onPrepared(MediaPlayer mp) {
      totalDuration = utils.milliSecondsToTimer(mediaPlayer.getDuration());
  }
});
于 2013-10-08T08:05:43.707 回答