Как отключить управление плеером с экрана блокировки после завершения воспроизведения в iOS10 +? - PullRequest
0 голосов
/ 09 сентября 2018

При воспроизведении звука в фоновом режиме на экране блокировки отображаются элементы управления плеером. Как убрать его, когда звук остановился? Если попытаться установить:

MPNowPlayingInfoCenter.default().nowPlayingInfo = nil

плеер все еще на экране блокировки, но поля исполнителя / песни пусты

enter image description here

UPD (мой код для аудиосессии):

в AppDelegate:

func setupAudioSession() {

    let audioSession = AVAudioSession.sharedInstance()

    do {
        try audioSession.setCategory(AVAudioSessionCategoryPlayback)
        try audioSession.setActive(true)

    } catch {
        print("Setting category to AVAudioSessionCategoryPlayback failed.")
    }
}

в классе игрока:

private func clearRemotePlayerInfo() { // call after stop button pressed
    try? AVAudioSession.sharedInstance().setActive(false)
    MPNowPlayingInfoCenter.default().nowPlayingInfo = [:]
}

1 Ответ

0 голосов
/ 13 сентября 2018

TL; DR

Пример на Github: https://github.com/JakubMazur/SO52243428


Вы не должны назначать nil этому nowPlayingInfo.

Что вам нужно сделать для этого:

  1. Остановите воспроизведение (не обязательно, но хорошо, чтобы очистить то, что вы создали)
  2. Установить сеанс неактивным
  3. Очистить nowPlayingInfo

Таким образом, код будет выглядеть так:

self.player?.stop() // Where self.player is AVAudioPlayer
try? self.session?.setActive(false, with: .notifyOthersOnDeactivation) // Where self.session is AVAudioSession. You should do it with do-catch to good error catching.
MPNowPlayingInfoCenter.default().nowPlayingInfo = [:]

И он будет вести себя так:

enter image description here

EDIT:

Я написал как можно более простой пример, чтобы попробовать. Он доступен на Github https://github.com/JakubMazur/SO52243428. Не стесняйтесь проверить его, и он соответствует вашему случаю.

...