Android MediaPlayer - только один экземпляр в любой момент времени? - PullRequest
2 голосов
/ 28 июня 2010

У меня есть приложение аудиоплеера, в котором есть основное задание, которое показывает 3 URL-адреса аудиопробы. При щелчке по одному из них происходит переход к подробному действию, в котором есть кнопка воспроизведения и паузы, чтобы запустить и приостановить воспроизведение звука.

Моя проблема в том, что, когда я запускаю Основное действие и говорю «кликнуть на аудио 1», я нажимаю кнопку «Воспроизвести» в разделе «Подробности». Это запустит MediaPlayer, и звук начнет воспроизводиться. Когда я возвращаюсь к основному действию, звук все еще воспроизводится, чего я и хочу. Теперь, когда я снова щелкаю на аудио 1, перехожу в Details Activity и снова нажимаю play, кажется, что новый MediaPlayer запускает звук. Итак, у меня есть 2 трека, играющих вместе!

Можно ли в любой момент времени иметь только один экземпляр MediaPlayer?

Спасибо Chris

Ответы [ 2 ]

1 голос
/ 28 июня 2010

Вы должны рассмотреть шаблон Singleton .Создайте класс MyPlayer со статическим методом getMediaPlayer (), который будет возвращать один и тот же экземпляр MediaPlayer при каждом вызове.

0 голосов
/ 11 апреля 2017

Класс Singleton

public final class MySingleton extends Application {

     static MediaPlayer instance;

    public static MediaPlayer getInstance() {

        if (instance == null)
        {
            instance = new MediaPlayer();

        }


        return instance;
    }


}

Адаптер, где ваш список

Инициализируйте ваш класс Singleton один раз в конструкторе

private static MediaPlayer mMediaPlayer = MySingleton.getInstance();

if (mMediaPlayer.isPlaying()) {
 try {
  mMediaPlayer.reset();
  mMediaPlayer.stop();

  mMediaPlayer.setDataSource(mainActivity, Uri.parse(songsarraylist.get(position).getPath()));
  mMediaPlayer.prepare();
  mMediaPlayer.start();




 } catch (Exception e) {
  Toast.makeText(mainActivity, "Catching", Toast.LENGTH_SHORT).show();
 }


} else {
 try {

  mMediaPlayer.setDataSource(mainActivity, Uri.parse(songsarraylist.get(position).getPath()));
  mMediaPlayer.prepare();
  mMediaPlayer.start();
 } catch (IOException e) {
  e.printStackTrace();
 }
}
...