Android MediaPlayer Singleton
-
27-10-2019 - |
Вопрос
Я прочитал несколько статей здесь, в которых предлагается использовать одноэлементный код, который я прочитал и поместил на деку, поскольку я хочу использовать одноэлементный код, чтобы разрешить только один экземпляр медиаплеера, независимо от того, сколько кликов определяет пользователь..
Обычно мне нужен только один звук, и если пользователь нажимает другую кнопку во время воспроизведения, он останавливает текущий звук и воспроизводит тот, который был нажат.Мне нужен только один экземпляр 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 не был запущен медиаплеер).
См. код ниже:
родовое слово