2015-01-03 29 views
0

我是android開發中的新手。我有一個MP3音頻播放器的代碼,從URL播放MP3。我想顯示加載對話框,當媒體播放器正在準備緩衝在MP3媒體播放器上加載對話框prepare()

這是我的代碼我顯示一個對話框準備,但它連續運行,不能播放MP3。 我不知道我在哪裏定義smp.setOnPreparedListener。請告訴我,我可以定義這個在播放功能或外部播放功能。請幫助我這裏是我的代碼。由於提前請

//播放MP3功能

public void playSong(int naatindex){ 
    // Play song 
    try { 

     mp.reset(); 
     mp.setDataSource(naatpaths[naatindex]); 
     tv = (TextView) this.findViewById(R.id.mywidget); 
     tv.setSelected(true); // Set focus to the textview 
     tv.setText(naattitles[naatindex]); 
     mp.prepare(); 
     mp.start(); 
     // Changing Button Image to pause image 
     btnPlay.setImageResource(R.drawable.btn_pause); 
     // set Progress bar values 
     songProgressBar.setProgress(0); 
     songProgressBar.setMax(100); 
     // Updating progress bar 
     updateProgressBar();    
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

這裏是我mp.setOnPreparedListener代碼

ProgressDialog progressDialog = ProgressDialog.show(this, 
         "Loading Title", "Loading Message"); 
    mp.setOnPreparedListener(new OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer mp) { 
      if (progressDialog != null && progressDialog.isShowing()){ 
       progressDialog.dismiss(); 
      } 
      mp.start(); 
    } 
}); 

回答

1

在playSong(),您撥打:

mp.prepare(); 
mp.start(); 

如果您直接啓動播放器,它會因爲可能沒有準備好播放而崩潰。試試這個:

MediaPlayer mp = new MediaPlayer(); 
mp.setDataSource(naatpaths[naatindex]); 
mp.setOnPreparedListener(new OnPreparedListener(){ 

@Override 
    public void onPrepared(MediaPlayer mp) { 
     mp.start(); 
    if (progressDialog != null && progressDialog.isShowing()) 
        progressDialog.dismiss(); 

    } 
}); 
mp.prepareAsync();   //this will prepare file a.k.a buffering 
songProgressBar.setProgress(0); 
songProgressBar.setMax(100); 
// Updating progress bar 
updateProgressBar(); 

如果它仍然無法播放,請檢查流url。它可能已經死了。也嘗試記錄播放器的狀態。檢查堆棧跟蹤是否有任何異常。