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

あなたの音楽クラスは単なるクラスでありアクティビティではないため、thisは ではなく オブジェクトを渡しますcontext。これが唯一のミュージック プレーヤー クラスである場合は、それを拡張するActivity必要があります。それ以外の場合は、それにコンテキストを渡す必要があります。

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

また、他の 2 つの例外については、例外が処理されないことが示されています。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 に答える
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 に答える