Просто для справки, я сделал это так:
public MediaPlayer[] mediaPlayers;
public MediaPlayer currentMediaPlayer;
public MediaPlayer preloadMediaPlayer;
вы можете инициализировать их:
private void initMediaPlayers() {
mediaPlayers = new MediaPlayer[MEDIA_PLAYER_COUNT];
mediaPlayers[0] = createMediaPlayer();
mediaPlayers[1] = createMediaPlayer();
currentMediaPlayer = mediaPlayers[0];
preloadMediaPlayer = mediaPlayers[1];
currentPlayerIndex = 0;
}
createMediaPlayer просто вспомогательный метод:
private MediaPlayer createMediaPlayer() {
final MediaPlayer smp = new MediaPlayer();
smp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
//TODO: add your code here
}
});
smp.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
//TODO: add your own error handling
return true;
}
});
//TODO: add anything else you need
return smp;
}
Затем, если вы хотите обменять игроков:
private void swapPlayers() {
if (currentPlayerIndex == 0) {
currentMediaPlayer = mediaPlayers[1];
preloadMediaPlayer = mediaPlayers[0];
currentPlayerIndex = 1;
} else if (currentPlayerIndex == 1) {
currentMediaPlayer = mediaPlayers[0];
preloadMediaPlayer = mediaPlayers[1];
currentPlayerIndex = 0;
}
}
Это упрощенная версия, вы, вероятно, хотите расширить MediaPlayer и добавить несколько флагов, чтобы узнать, готовы ли вы предварительно загрузить (или сделать поджимать, и вы будете готовы) и т.д.
Но это должен дать вам эту идею.
Не забудьте освободить все, когда вы закончите, вызвав сброс/выпуск в медиаплеере.
Это звучит разумно, если вы используете API-интерфейс MediaPlayer. В API-интерфейсе 16 и выше вы можете использовать метод setNextMediaPlayer, чтобы сделать переход Android между двумя MediaPlayers максимально простым. В более старых версиях вы можете сделать переключатель в 'onCompletionListener'. – Michael
@Michael Спасибо, мое приложение должно поддерживать API 8. Итак, мне нужно реализовать это самостоятельно. Изменение между ними, когда все готово, именно то, что я хотел. – RCB