Есть коллекция, которая хранит названия аудио
songs = new ArrayList<>();
songs.add("song_1.ogg");
songs.add("song_2.ogg");
songs.add("song_3.ogg");
songs.add("song_4.ogg");
songs.add("song_5.ogg");
songs.add("song_6.ogg");
Есть метод, который проигрывает аудио в зависимости от того, какое значение передано.
private void playSong(int i) {
String mSong = songs.get(i);
try {
AssetFileDescriptor afd = this.getAssets().openFd("sounds/songs/" + mSong);
mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.setLooping(false);
mp.prepare();
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
} catch (IOException ex) {
ex.printStackTrace();
}
}
Есть кнопка, по нажатию на который нужно проигрывать аудио так: Нажали один раз начинается проигрывание аудио из коллекции song_1.ogg, нажали второй раз первое остановилось началось проигрывание аудио song_2.ogg и т.д. до аудио song_6.ogg. Если нажать еще раз, то опять проигрывать аудио song_1.ogg и т.д.
Как это реализовать? Логику просто подскажите. А то я сделала так, и у меня начинают играть несколько аудио если я несколько раз нажму на кнопку
счетчик
private int counter = 0;
блок case
case R.id.btnMusic:
if (counter == 0) {
play(0);
} else if (counter == 1) {
mp.release();
play(1);
} else if (counter == 2) {
mp.release();
play(2);
} else if (counter == 3) {
mp.release();
play(3);
} else if (counter == 4) {
mp.release();
play(4);
} else if (counter == 5) {
mp.release();
play(5);
}
break;
Сам метод
private void play(int i) {
counter = i;
String mSong = songs.get(counter);
try {
AssetFileDescriptor afd = this.getAssets().openFd("sounds/songs/" + mSong);
mp = new MediaPlayer();
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.setLooping(false);
mp.prepare();
mp.start();
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
}
});
} catch (IOException ex) {
ex.printStackTrace();
}
}
Ответ
Вставьте в методе play(), что-то типа:
if(mp.isPlaying()) {
mp.stop();
mp.reset();
}
А сам плеер надо создавать 1 раз, а то вы создаете при каждом обращении новый экземпляр плеера.
Комментариев нет:
Отправить комментарий