Android MediaPlayer WakeLock не работает - PullRequest
1 голос
/ 12 февраля 2012

Я сделал базовый радиоплеер, код для его воспроизведения приведен ниже и работает отлично, за исключением метода setWakeMode.Когда я переключаю телефон в режим ожидания, звук будет хорошо воспроизводиться до 2 минут, после чего он начнет останавливаться и запускаться.Любые идеи?

NB radioPlayer является экземпляром MediaPlayer.

public boolean startRadio()
{   
    try
    {
        String url = getString(R.string.radioURL); // Radio url.
        radioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        radioPlayer.setDataSource(url);
        radioPlayer.prepare(); // might take long! (for buffering, etc)

        radioPlayer.setWakeMode(this.getApplicationContext(), PowerManager.PARTIAL_WAKE_LOCK);
        radioPlayer.start();
        return true;
    }
    catch(Exception e)
    {
        showAlert(getString(R.string.error), getString(R.string.radioError));
        radioPlayer.release();
        radioPlayer = new MediaPlayer();
        return false;
    }
}

ОБНОВЛЕНИЕ: После просмотра другого потока в другом месте, я обнаружил, что эта проблема, кажется, уникальная для телефонов HTCФактически, мой Samsung Galaxy Tab выживает даже без функции пробуждения.Есть идеи?

Ответы [ 4 ]

5 голосов
/ 13 июня 2013

Ваш MediaPlayer остановлен, потому что Wi-Fi переходит в спящий режим, поэтому вы должны попытаться использовать WifiLock , чтобы предотвратить это.

1 голос
/ 12 февраля 2012

Разработчики Android Страница Google + переиздана [this

Небольшой совет: если вы хотите, чтобы экран оставался включенным, пока пользователь находится в вашем приложении (например, играет в игру или смотрит видео),лучший способ сделать это с одним из них:

http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_KEEP_SCREEN_ON

http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)

http://developer.android.com/reference/android/media/MediaPlayer.html#setScreenOnWhilePlaying(boolean)

Не используйте http://developer.android.com/reference/android/os/PowerManager.WakeLock.html если нет необходимости, поскольку для этого требуется, чтобы вы запросили разрешение WAKE_LOCK (таким образом, еще одно разрешение было показано пользователю, оставляющему им меньше шансов установить ваше приложение).Кроме того, использование одного из предыдущих API-интерфейсов позволяет системе управлять блокировкой пробуждения за вас, поэтому у вас не может быть ошибок, когда пользователь покидает ваше приложение, а экран все еще остается включенным.

0 голосов
/ 30 апреля 2015

Сначала вы должны использовать prepareAsync () вместо prepare (), потому что буферизация может занять некоторое время, и с этим методом вся работа будет выполняться в отдельном потоке ... Вы также можете добавить несколько слушателей, которые, несомненно, помогут организовать ваш код и методы;).

0 голосов
/ 17 января 2013

set keepScreenOn = true

Самая простая вещь.

* в одном из представлений найдите свойство с именем keepScreenOn и установите его * true.

Вот и все.Это работает как шарм:)

...