2012-08-22 25 views
0

我試圖讓音樂在我的應用程序中播放,並在第一個播放完成後播放歌曲,但是我收到了一些我無法解決的幫助錯誤?MediaPlayer出錯

public class Music { 
    int count; 
    String[] titles = new String[] { "title1.mp3", "title2.mp3", "title3.mp3", "title4.mp3" }; 

    public void GameMusic(){ 
     count = 0; 
     MediaPlayer mp = MediaPlayer.create(this, R.raw.title1); 
     mp.start(); 
    } 

    void onCompletion(MediaPlayer mp){ 
     mp.stop(); 
     if (count == titles.length -1) { 
      count = 0; 
     } 
     mp.setDataSource(titles[count]); 
     count++; 
     mp.prepare(); 
     mp.start(); 
    } 
} 

的錯誤是在:

MediaPlayer mp = MediaPlayer.create(this, R.raw.music); 

(該方法在類型的MediaPlayer不適用的參數(音樂,INT)

mp.setDataSource(titles[count]); 

創建(上下文,INT) (未處理的異常類型IOException)

mp.prepare(); 

(未處理的異常類型IOException)

任何幫助,將不勝感激。

+0

你之前使用過java嗎? –

回答

1

那麼錯誤可能有點神祕,但它們是不言自明的。

您需要通過上下文來GameMusic(),並使用它來初始化的MediaPlayer:

public void GameMusic(Context context){ 
    count = 0; 
    MediaPlayer mp = MediaPlayer.create(context, R.raw.title1); 
    mp.start(); 
} 

this只有當類(在這種情況下,音樂)擴展語境,所以你需要提供一個上下文工作其他方式。

而且在onCompletion()使用try-catch塊來處理IOException異常:

try { 
    mp.setDataSource(titles[count]); 
    count++; 
    mp.prepare(); 
    mp.start(); 
} 
catch(IOException e) { 
    // Do something when MediaPlayer fails 
} 
1

音樂課就是一個類,而不是一個活動,因此this傳遞一個對象,而不是context。如果這是你唯一的音樂播放器類,那麼你需要它來擴展Activity否則你需要傳遞一個上下文給它。

public void GameMusic(Context context){ 
count = 0; 
MediaPlayer mp = MediaPlayer.create(context, R.raw.title1); 
mp.start(); 
} 

而對於其他兩個例外,它指出的例外是未處理的。所以你需要用一個Try-Catch擋住未被抓住的手柄IOException

這應該解決您現在正在獲取的所有錯誤。

1

設置數據源到媒體播放器時嘗試使用absolutepath音樂文件

,如果它被保存在SD卡調用 mp.prepare後表示..try這

String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory() 
             .getAbsolutePath(); 

mp.setDataSource(ExternalStorageDirectoryPath +"/"+titles[count]); 

( );

實施onpreparedlistner,得到後這種情況的通知,然後啓動媒體播放器

@Override 
public void onPrepared(MediaPlayer mp) { 
    mp.start(); 
} 

並處理所有類型的異常,好讓你可以輕鬆地跟蹤問題。