Использование WakeLock для воспроизведения потока - PullRequest
9 голосов
/ 22 июня 2011

У меня работает MediaPlayer в Сервисе, который воспроизводит аудио с URL (потоковая передача).На данный момент он, кажется, работает хорошо, и даже продолжает играть, когда я перевожу телефон в режим ожидания.

В настоящее время я не получаю Wakelock.У меня вопрос:

  • Действительно ли необходимо приобрести вейк-рук в моей ситуации?
  • Если это необходимо, какой тип вейк-руля я должен приобрести?

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

Ответы [ 6 ]

14 голосов
/ 28 июня 2011
  1. Наблюдайте за телефоном около пяти минут, когда он находится в режиме ожидания. Если он продолжает играть, вам не нужен замок для пробуждения; это, вероятно, указывает на то, что экземпляр MediaPlayer уже есть. В Android примерно через две минуты бездействия пользователя все несущественное, что не имеет функции будильника, будет приостановлено; пять минут должны устранить любые сомнения, связанные с двухминутным таймером.
  2. Попробуйте частичную блокировку пробуждения. Это позволит вашим пользователям слышать звук, поскольку процессор будет оставаться "активным". Тем не менее, он не будет тратить батарею на отображение изображения, так как экран может идти спать. Это, вероятно, то, что вы хотите.

РЕДАКТИРОВАТЬ: Если вы хотите играть на безопасной стороне, то вы хотите использовать WakeLock. Таким образом, если MediaPlayer когда-либо изменится и ему будет разрешено перейти в спящий режим, когда телефон приостановит работу, ваша программа по-прежнему будет работать правильно. На самом деле нечего терять, добавляя WakeLock при условии, что вы корректно освободите его, когда он больше не требуется. Если вы этого не сделаете, вы просто разряжаете больше батареи, чем намереваетесь, и в худшем случае вы сразу же увидите ошибку, указывающую, что вы не сняли блокировку, когда ваше приложение завершает работу. Добавление WakeLock - хотя и потенциально избыточное - является хорошей практикой, поскольку оно делает ваше приложение более устойчивым к изменениям программного обеспечения, от которых оно зависит.

10 голосов
/ 01 июля 2011

MediaPlayer по умолчанию не делает этого автоматически для вас.

Однако вместо того, чтобы вам приходилось приобретать блокировку от пробуждения, у него есть метод, который вы можете вызвать, чтобы сказать, чтобы он удерживался при игре:

http://developer.android.com/reference/android/media/MediaPlayer.html#setWakeMode(android.content.Context, int)

Обратите внимание, что, как сказано в документации, все еще ваше приложение удерживает блокировку активизации, поэтому для использования этой функции вам потребуется запроситьразрешение на пробуждение.

4 голосов
/ 01 июля 2011

Вам, вероятно, понадобится WakeLock, поскольку вы не можете гарантировать, что PowerManager не включится и не уснет во время воспроизведения. PARTIAL_WAKE_LOCK обеспечит использование самого низкого уровня заряда батареи (процессор включен; экран / клавиатура выключены). Вы всегда можете проверить эффект разряда батареи, но я сомневаюсь, что он будет большим, так как процессор должен быть в любом случае включен для воспроизведения музыки. Этот метод гарантирует, что независимо от того, какой телефон используется (или какие-либо настройки на указанном телефоне), воспроизведение не будет отключено от процессора, идущего в спящий режим.

1 голос
/ 22 июня 2011

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

0 голосов
/ 27 августа 2018
  mediaPlayer.setScreenOnWhilePlaying(true);

Документация гласит: «Это предпочтительный метод по сравнению с« setWakeMode », где это возможно, поскольку он не требует, чтобы приложение имело разрешение на низкоуровневый доступ к пробуждению после пробуждения».

0 голосов
/ 02 июля 2011

Вам не требуется блокировка от пробуждения.Если вы используете WAKE LOCK, вы заставите пользователей держать свой экран включенным, я лично предпочитаю выключать экран во время воспроизведения мультимедиа.

Пример долгосрочной службы здесь пример

...