0

我正在尝试在我的应用程序中播放音乐并在第一首歌曲完成后播放歌曲,但我遇到了一些我无法解决的错误?

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)

任何帮助,将不胜感激。

4

3 回答 3

1

好吧,这些错误可能有点神秘,但它们是不言自明的。

您需要将 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
}
于 2012-08-22T20:28:04.153 回答
1

您的 Music Class 只是一个类而不是一个活动,因此this传递一个对象而不是一个context. 如果这是您唯一的音乐播放器类,那么您需要扩展它,Activity否则您需要将上下文传递给它。

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

对于其他两个异常,它声明异常未处理。所以你需要用一个Try-Catch挡住未被抓住的把手IOException

这应该可以解决您现在遇到的所有错误。

于 2012-08-22T20:34:37.353 回答
1

将数据源设置为 Mediaplayer 时尝试使用音乐文件的绝对路径

如果它存储在 sd 卡中意味着 .. 试试这个

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

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

调用 mp.prepare() 之后;

实现onpreparedlistner,在收到通知后启动媒体播放器

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

并处理各种异常,以便您轻松跟踪问题。

于 2012-08-23T12:33:47.223 回答