Swift: командный центр не работает, хотя я явно установил кнопки для включения?

Хорошо, возникли некоторые проблемы с командным центром Apple здесь, проигрыванием фонового звука / на экране блокировки и не могу понять, почему. Кажется довольно простым, но у меня даже нет информации об эпизоде, достоверно отображаемой в командном центре, определенно не могу воспроизвести / приостановить.

Сначала я начинаю аудио сеанс:

  do {
                try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: .mixWithOthers)
                print("Playback OK")
                try AVAudioSession.sharedInstance().setActive(true)
                print("Session is Active")
            } catch {
                print(error)
            }

Затем я настроил кнопки командного центра, чтобы они были включены явно:

UIApplication.shared.beginReceivingRemoteControlEvents()
        let commandCenter = MPRemoteCommandCenter.shared()


        commandCenter.skipForwardCommand.isEnabled = true
        commandCenter.skipBackwardCommand.isEnabled = true
        commandCenter.nextTrackCommand.isEnabled = true

        commandCenter.togglePlayPauseCommand.isEnabled = true
//        commandCenter.previousTrackCommand.isEnabled = true
//        commandCenter.togglePlayPauseCommand.isEnabled = true

        commandCenter.togglePlayPauseCommand.addTarget(self, action:#selector(togglePlayPause))
//        commandCenter.nextTrackCommand.addTarget(self, action:#selector(nextTrackForward))
//        commandCenter.previousTrackCommand.addTarget(self, action:#selector(nextTrackBack))

        commandCenter.skipForwardCommand.addTarget(self, action:#selector(ffPressed))
        commandCenter.skipBackwardCommand.addTarget(self, action:#selector(rwPressed))

Вот ключи lldb plist, если это имеет значение для аудио:

Что здесь не так?

0 ответов

Возможно, ваш вопрос старый, но кому-то это тоже может понадобиться, вот как я это сделал:

Swift 5

let player = AVPlayer()

func commandCenter () {
    let commandCenter = MPRemoteCommandCenter.shared()
    commandCenter.playCommand.addTarget         { (commandEvent) -> MPRemoteCommandHandlerStatus in  self.play();   return .success }
    commandCenter.pauseCommand.addTarget        { (commandEvent) -> MPRemoteCommandHandlerStatus in  self.pause();  return .success }
}

func pause () {
    player.pause ()
    print("paused")
}

func play () {
    player.play()
    print("play")
}

Вам не нужно включать commandCenter.playCommand в значение true

Другие вопросы по тегам