Вопрос

Я прочитал несколько статей здесь, в которых предлагается использовать одноэлементный код, который я прочитал и поместил на деку, поскольку я хочу использовать одноэлементный код, чтобы разрешить только один экземпляр медиаплеера, независимо от того, сколько кликов определяет пользователь..

Обычно мне нужен только один звук, и если пользователь нажимает другую кнопку во время воспроизведения, он останавливает текущий звук и воспроизводит тот, который был нажат.Мне нужен только один экземпляр MediaPlayer, но я не понимаю, как его реализовать.

Вот основная идея моего кода:

родовое слово

Это то, что мне пришлось обновить и изменить свой код, но у меня возникла проблема с передачей функции playresource ().Неправильно ли я передаю его, если он передается частным образом.

Это было полезно?

Решение

Для этого вам не нужен синглтон.Вы вызываете метод create каждый раз, когда хотите воспроизвести файл.Это неправильно, потому что у вас уже есть экземпляр MediaPlayer. Отметьте реализация MediaPlayer.create . Я бы так сделал:

  • создать новый метод playResource (int j, int resource)
  • в каждом случае R.id.btnX я бы вызвал метод playResource (X, R.raw.Y) - X и Y зависят от btn

Пример метода playResource:

родовое слово

Если MediaPlayer вам больше не понадобится, отпустите его.Например, в вызове onPause ():

родовое слово

Я не проверял это, поэтому могут быть ошибки.Надеюсь, это поможет.

Другие советы

Метод getSingletonObject () должен возвращать экземпляр MediaPlayer, созданный с использованием конструктора по умолчанию для MediaPlayer (без указания ресурса).

Вы можете вызвать getSingletonObject () из onCreate () в основном классе и инициализировать с его помощью проигрыватель.

Позже в onClick () вы должны вызвать player.prepare (), а затем player.setDataSource (), передавая ресурс.

Итак, ваш код должен выглядеть примерно так:

родовое слово

В основном классе в методе onCreate ()

родовое слово

Надеюсь, вы сможете разобраться в коде onClick () самостоятельно.И не забудьте добавить соответствующие предложения try..catch в метод onClick ().

Надеюсь, это поможет !!

Я пытался решить эту проблему для собственного проекта.Я столкнулся с той же проблемой, что при втором воспроизведении приложение вылетало.

Добавление player = new MediaPlayer(); решило проблему (похоже, в блоке try-catch не был запущен медиаплеер).

См. код ниже:

родовое слово
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top