在android上的媒体播放器中尝试在没有有效媒体播放器的情况下调用getDuration

时间:2011-05-17 04:36:25

标签: android

我正在使用搜索栏从sdcard播放歌曲。在获得歌曲的持续时间时,尝试在没有有效媒体播放器和非法状态异常的情况下调用getDuration 。文件名和路径是有效的one.i尝试了很长时间我无法得到解决方案。以及如何在播放歌曲时移动搜索栏。请帮助我。 我的代码:

Button play,pause,stop;
SeekBar seek;
MediaPlayer mediaPlayer;
SurfaceView sv;
boolean isPlaying = false;

    play.setOnClickListener(new View.OnClickListener() 
    {   
        public void onClick(View v) 
        {
            playsong(filename); 
        }
    });


private void playsong(String filename2) {
    try{
        Log.e("filename2",filename2);
        mediaPlayer = new  MediaPlayer();
        mediaPlayer.setDataSource(filename2);
        seek.setMax(mediaPlayer.getDuration());
        mediaPlayer.prepare();
        mediaPlayer.start();
        myHandler.post(runn);
        isPlaying = true;
        mediaPlayer.setOnCompletionListener(this);          
    }
    catch(Exception ex){
        Log.e("sdcard-err2:",""+ex);
    }

}

private Handler myHandler = new Handler();
    final Runnable runn = new Runnable()
    {
        public void run() 
        {
            if (mediaPlayer != null) 
            {
                if (isPlaying ) 
                {
                    try 
                    {
                       int currentPosition = mediaPlayer.getCurrentPosition();

                       seek.setProgress(currentPosition);

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

                    sv.postDelayed(runn, 150);
                }
            }
        }

    };  

我的日志cat错误:

05-17 09:46:43.578: ERROR/filename2(1670): /sdcard/The Dance Theme.mp3
05-17 09:46:43.594: ERROR/MediaPlayer(1670): Attempt to call getDuration without a valid mediaplayer
05-17 09:46:43.594: ERROR/MediaPlayer(1670): error (-38, 0)
05-17 09:46:43.594: ERROR/MediaPlayer(1670): prepareAsync called in state 0
05-17 09:46:43.594: ERROR/sdcard-err2:(1670): java.lang.IllegalStateException
05-17 09:46:43.594: ERROR/MediaPlayer(1670): Error (-38,0)

1 个答案:

答案 0 :(得分:15)

您可能在文件完全加载之前调用getDuration。看看this question的解决方案是否适合您。