#android #android-notifications #exoplayer #exoplayer2.x #foreground-service
#Android #android-уведомления #exoplayer #exoplayer2.x #передний план-сервис
Вопрос:
Я хочу изменить демонстрацию ExoPlayer, чтобы разрешить продолжение воспроизведения звука при блокировке экрана (это должно работать независимо от того, является ли воспроизводимый носитель аудио или видео). Основываясь на некоторых подсказках (например, 1, 2), это то, что я придумал до сих пор:
https://github.com/google/ExoPlayer/compare/release-v2…sedubois:background-playback
Это напрямую основано на демонстрационном коде ExoPlayer, который в настоящее время находится в версии 2.12.1. Он добавляет разрешение «переднего плана», регистрирует службу и создает уведомление в этой службе (согласно документации, это уведомление требуется для фонового воспроизведения). Служба запускается при инициализации проигрывателя.
Я могу запустить проигрыватель, и демонстрация выглядит так, как показано ниже, с аудиопотоком. На этом этапе уведомление создается правильно, в нем отображаются сведения об проигрывателе (название, описание, индикатор выполнения) и кнопки управления (см. Рисунок Ниже), которые работают (я могу воспроизвести / приостановить, перезапустить с начала и пропустить назад / вперед).).
Однако воспроизведение по-прежнему останавливается, когда я сворачиваю приложение или когда я блокирую экран нажатием кнопки питания. Каков правильный способ заставить это работать?
Комментарии:
1. Возможно, это останавливает воспроизведение в методах onStop / onPause вашей активности.
2. Спасибо @sdex, я должен просто проверить
!player.isPlaying()
, есть ли в операторах if эти методы? Что делать при возобновлении? Если я сделаю это, это позволит продолжить воспроизведение, когда экран заблокирован, но при разблокировке экрана звук возвращается в положение, в котором он находился, когда экран был заблокирован.3. Кроме того, если я просто добавлю проверку
!player.isPlaying()
в onPause / onStop, проигрыватель не остановится при выходе из проигрывателя, нажав кнопку «Назад», и поэтому он вылетает при повторном входе в него.
Ответ №1:
Просто чтобы убедиться, что мы на одной странице. Я тестирую dev-v2
ветку репозитория exoplayer здесь
onStop()
метод в PlayerActivity.java
— это освобождение проигрывателя, поэтому, когда приложение переходит в фоновый onStop()
режим, вызывается, и оно освобождает проигрыватель с помощью метода releasePlayer
. Если вы закомментируете этот метод, т. Е. Не отпустите проигрыватель onStop()
, тогда проигрыватель будет воспроизводиться в фоновом режиме.
Комментарии:
1. Да, @Harneev, удаление releasePlayer позволяет проигрывателю продолжать в фоновом режиме. Но это также позволяет проигрывателю продолжать, оставаясь в приложении, но переходя с помощью кнопки «Назад» (проблема № 1). Затем при повторном входе в проигрыватель путем выбора другого трека происходит сбой проигрывателя (проблема № 2). Как убедиться, что проигрыватель продолжается только при сворачивании или блокировке экрана, но не при выходе из экрана проигрывателя, оставаясь в приложении?
2. Это будет обработка жизненного цикла активности, с которой вам нужно будет справиться самостоятельно. Такие методы, как
onUserLeaveHint
могут уведомлять, когда пользователь нажал home или перешел в другое приложение, илиonBackPressed
могут уведомлять, когда пользователь возвращается к предыдущему действию или экрану. Это видео также может помочь вам с реализацией фонового воспроизведения: youtube.com/watch?v=svdq1BWl4r8amp;t=1160s