2011-05-17 49 views
5

我正在用搜索欄播放sdcard中的歌曲。同時獲取歌曲的持續時間我得到嘗試調用getDuration沒有有效的媒體播放器和非法狀態異常。文件名和路徑是有效one.i試了很久,我無法得到解決方案。以及如何在播放歌曲時移動搜索欄。請幫助我。 我的代碼:嘗試在沒有媒體播放器的有效媒體播放器上調用getDuration android

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

    }; 

我的日誌貓錯誤:

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) 

回答

12

你可能會調用getDuration前檔滿載。看看this question的解決方案是否適合你。

+0

感謝它的工作。 – 2011-05-17 05:30:55