#java #android #аудио
Есть коллекция, которая хранит названия аудио 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(); } }
Ответы
Ответ 1
Вставьте в методе play(), что-то типа: if(mp.isPlaying()) { mp.stop(); mp.reset(); } А сам плеер надо создавать 1 раз, а то вы создаете при каждом обращении новый экземпляр плеера.
Комментариев нет:
Отправить комментарий