[英]Error with 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類型的create(Context,int)方法不適用於參數(Music,int)
mp.setDataSource(titles[count]);
(未處理的異常類型IOException)
mp.prepare();
(未處理的異常類型IOException)
任何幫助,將不勝感激。
好吧,這些錯誤可能有點神秘,但它們是不言而喻的。
您需要將Context傳遞給GameMusic()並使用它來初始化MediaPlayer:
public void GameMusic(Context context){
count = 0;
MediaPlayer mp = MediaPlayer.create(context, R.raw.title1);
mp.start();
}
this
僅在類(在本例中為Music)擴展了Context的情況下有效,因此您需要以其他方式提供Context。
在onCompletion()中,使用try-catch塊來處理IOException:
try {
mp.setDataSource(titles[count]);
count++;
mp.prepare();
mp.start();
}
catch(IOException e) {
// Do something when MediaPlayer fails
}
您的音樂課只是一堂課,而不是一項活動,因此, this
通過一個對象而不是context
。 如果這是您唯一的音樂播放器類,則需要它來擴展Activity
否則您需要向其傳遞上下文。
public void GameMusic(Context context){
count = 0;
MediaPlayer mp = MediaPlayer.create(context, R.raw.title1);
mp.start();
}
對於其他兩個異常,它指出未處理的異常。 因此,您需要使用Try-Catch
塊來處理未捕獲的IOException
。
那應該可以解決您現在遇到的所有錯誤。
將數據源設置為Mediaplayer時,嘗試使用音樂文件的絕對路徑
如果存儲在SD卡中..嘗試
String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory()
.getAbsolutePath();
mp.setDataSource(ExternalStorageDirectoryPath +"/"+titles[count]);
調用mp.prepare()之后;
實現onpreparedlistner,在獲得通知后,然后啟動mediaplayer
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
並處理所有異常,以便您可以輕松跟蹤問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.