2013-10-11 72 views
0

我試圖改變此項目的一些功能Media player從原始文件夾而不是從SD卡中讀取mp3。但它會引發錯誤「嘗試在沒有有效的媒體播放器的情況下調用getDuration」請給出任何建議?嘗試在沒有有效媒體播放器的情況下調用getDuration

public void playSong(int songIndex){ // parameter is not used. is set static content 

    try { 
     mp.reset(); 
     mp = mp.create(this, R.raw.ledzepellin); // static content! 
     mp.prepare(); 
     mp.start(); 

     String songTitle = "title"; 
     songTitleLabel.setText(songTitle); 


     songProgressBar.setProgress(0); 
     songProgressBar.setMax(100); 


     updateProgressBar(); 

    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 


public void updateProgressBar() { 
    mHandler.postDelayed(mUpdateTimeTask, 100); 
} 


private Runnable mUpdateTimeTask = new Runnable() { 
    public void run() { 
     long totalDuration = mp.getDuration(); // ---- HERE IT GIVE ME ERROR 
     long currentDuration = mp.getCurrentPosition(); 


     songTotalDurationLabel.setText(""+utils.milliSecondsToTimer(totalDuration)); 

     songCurrentDurationLabel.setText(""+utils.milliSecondsToTimer(currentDuration)); 


     int progress = (int)(utils.getProgressPercentage(currentDuration, totalDuration)); 

     songProgressBar.setProgress(progress); 


     mHandler.postDelayed(this, 100); 
    } 
}; 

在這裏,我開始playSong方法首先它打開了我所有樂曲的列表視圖當我選擇TI給我回導致演員,但它不是重要的原料來源設置staticly

 btnPlaylist.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      Intent i = new Intent(getApplicationContext(), PlayListActivity.class); 
      startActivityForResult(i, 100); 
     } 
    }); 

} 

@Override 
protected void onActivityResult(int requestCode, 
           int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == 100){ 
     currentSongIndex = data.getExtras().getInt("songIndex"); 

     playSong(currentSongIndex); 
    } 

} 
+0

你在哪裏運行'playSong'方法? –

+0

代碼更新看 – Yurdaaaaa

+0

@Yurdaaaaa,我面臨同樣的問題,請告訴我你是如何解決這個問題? –

回答

2

文檔對於您要撥打的靜態create方法說:

成功時,prepare()將被調用,不能再次調用。

是否沒有其他錯誤被打印到logcat?您可以考慮使用setOnErrorListener添加一個錯誤偵聽器,並且還可以查看狀態圖here。當MediaPlayer處於空閒或處於錯誤狀態時,不應調用大多數方法。在你的情況下,我相信它在prepare()之後進入了一個錯誤狀態,並且應該從那時起引發問題。

+0

謝謝你,我有點改變代碼和功能,現在是代碼小馬車,但工作:) – Yurdaaaaa

+1

hello @Yurdaaaaa我得到了同樣的錯誤你在功能上做什麼改變請幫助我。 –

相關問題