Как я могу продолжать играть фоновую музыку, изменяя активность? - PullRequest
5 голосов
/ 04 марта 2011

В моем приложении фоновая музыка воспроизводится в цикле, используя MediaPlayer.Я останавливаю музыку в onPause Действия, чтобы она не продолжала воспроизводиться, если пользователь покидает приложение, нажимая клавишу «Домой», или если он получает телефонный звонок и т. Д.

Однако,Теперь мне нужно, чтобы музыка продолжала играть без проблем, когда пользователь переходит к некоторым другим действиям.То есть, если они нажимают кнопку A, тогда я добавляю активность A в стек, и музыка должна продолжаться;однако, если они нажимают кнопку B, тогда я добавляю активность B в стек, и музыка должна остановиться.Точно так же музыка должна продолжаться, если они нажимают кнопку «Назад» на телефоне, чтобы вернуться из занятия А. к исходному занятию.

Я попытался снова запустить MediaPlayer в onResume занятия А, но довольнозаметный разрыв в музыке во время перехода.

В данный момент у меня onPause вызывает задержку в полсекунды перед тем, как музыка затухает в течение еще четверти секунды;это можно отменить из другого действия onResume.Это означает, что музыка останавливается достаточно быстро, когда пользователь покидает приложение;однако, когда пользователь переключает действия, я все же получаю небольшую паузу в музыке на некоторых более медленных устройствах.Кроме того, это похоже на очень грязный хак.

Есть ли лучший способ?

[Редактировать: если это помогает, MediaPlayer содержится в статическом классе, к которому я могу получить доступ откуда угоднов заявке.]

1 Ответ

3 голосов
/ 04 марта 2011

Самое простое решение, которое я могу придумать, если бы мне нужно было это сделать, было бы установить статическую переменную флага в моем глобальном Application объекте (назовем его sStartingNewActivity). Везде, где я начинаю намеренное новое действие (или нажимаю «назад» из действия, которое не является точкой входа, переопределяя метод onBackPressed), я устанавливал бы это значение на true и получал onPause не останавливать музыку, если этот флаг установлен. Я бы установил значение обратно false в каждом действии onCreate. Я не думаю, что 1-2-секундная пауза перед исчезновением - это плохой способ - это на самом деле ведет себя примерно так же, как и когда пользователь нажимает кнопку «домой» в приложении для iOS с фоновой музыкой.

РЕДАКТИРОВАТЬ: Вы также можете попробовать решение на основе услуг, которое «отслеживает», выполняются ли ваши действия, прослушивая их для определенной трансляции; в сети есть пример кода , который я не пробовал, но это интересный подход).

...