私はゲームを作っています。曲のリストをバックグラウンドで再生し、すべてが終わったらループさせたいと思っています。これを行うために、sを作成し、それが最後のアイテムでない限り、リスト内の次のプレーヤーでMediaPlayer
呼び出すことをループします。setNextMediaPlayer
次に、リストの最初の項目に戻します。これは機能しますが、ループして最初の曲をもう一度再生しようとするとplay()
、無効な状態で呼び出したことが通知されます。だから私OnCompleteListener
は曲が終わったときにprepare()
もう一度それを呼び出すように追加しましたが、それは役に立ちませんでした。MediaPlayer
もう一度再生するには、最後に達したaに対して何をする必要がありますか?
-= UPDATE =-これが初期化のための私のコードですMediaPlayers
(それはただそれを混乱させるので、tryとcatchsを除いて):
String[] assets = manager.list("songs");
Collections.shuffle(Arrays.asList(assets));
for(String name : assets)
{
MediaPlayer player = new MediaPlayer();
AssetFileDescriptor descriptor = manager.openFd("songs/"+name);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource(descriptor.getFileDescriptor(), descriptor.getStartOffset(), descriptor.getLength());
player.setOnCompletionListener(_reset);
player.prepare();
if(_songs.size() > 0)
{
_songs.get(_songs.size() - 1).setNextMediaPlayer(player);
}
_songs.add(player);
}
_songs.get(_songs.size() - 1).setNextMediaPlayer(_songs.get(0));