2013-10-08 19 views
0

我的ViewPager中有两个片段。第一个片段列出所有可用的mp3文件,第二个片段实际播放(实现MediaPlayer逻辑)。如何getDuration()有/没有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) 

如何我刚刚从该网址提取总时长?请帮助。

回答

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

        } 
       }); 
+0

如何完全加载文件?我打电话给onPreparedListener? –

+0

是的,你也有。请看我的答案! –

0

您正准备在准备工作完成之前获得mediaPlayer.getDuration()。只有在准备完成后,才能使用setOnPreparedListener()方法设置准备侦听器并调用getDuration()方法。

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    public void onPrepared(MediaPlayer mp) { 
     totalDuration = utils.milliSecondsToTimer(mediaPlayer.getDuration()); 
    } 
}); 
+0

我得到'IllegalStateException' - attachNewPlayer在状态2错误中调用! –

相关问题