MPRemoteCommandCenter не отображается на экране блокировки

Может быть, это дублирующий вопрос, но ни одно из решений не работает для меня. Я пробовал почти все.

Информация о текущем воспроизведении не обновляется на экране блокировки.

Версия Swift: 5 и версия iOS: 13

Вот мой код

func setupRemoteCommandCenter() {
        UIApplication.shared.beginReceivingRemoteControlEvents()

        let commandCenter = MPRemoteCommandCenter.shared()
        

        commandCenter.playCommand.addTarget { event in
            return .success
        }
        

        commandCenter.pauseCommand.addTarget { event in
            return .success
        }
        

        commandCenter.nextTrackCommand.addTarget { event in
            return .success
        }
        

        commandCenter.previousTrackCommand.addTarget { event in
            return .success
        }
    }
    
    func updateLockScreen() {
        var nowPlayingInfo = [String : Any]()
        nowPlayingInfo[MPMediaItemPropertyArtist] = "Artist"
        nowPlayingInfo[MPMediaItemPropertyTitle] = "title"
        MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
    }

Один метод вызывается из viewDidLoad, т.е.

override func viewDidLoad() {
        super.viewDidLoad()
        AudioManager.shared.audioManageDelegate = self
        // Do any additional setup after loading the view.
        setupRemoteCommandCenter()
    }

А другой вызывается из метода playbuttonAction, т.е.

@IBAction func togglePlayPauseButton(sender: UIButton) {
        //play pause button
        sender.isSelected = !sender.isSelected
        //updateLockScreen() //I checked it from calling here also
        if sender.isSelected {
            AudioManager.shared.playMusic()
        } else {
            AudioManager.shared.pauseMusic()
        }
        updateLockScreen()
    }

Мой Appdelegate здесь

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        setUPforbackground()
        return true
    }

    func setUPforbackground() {
        do {
            try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])
            print("Playback OK")
            try AVAudioSession.sharedInstance().setActive(true)
            print("Session is Active")
        } catch {
            print(error)
        }
    }

Вызов updateLockScreen() перед вызовом playMusic() также не дает результата. Я что-то пропустил здесь?


person kalpa    schedule 03.07.2020    source источник


Ответы (1)


После тщательного анализа кода я обнаружил, что

try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default, options: [.mixWithOthers, .allowAirPlay])

Ошибка бросания, поэтому я изменил ее на ниже

try AVAudioSession.sharedInstance().setCategory(.playback, mode: .default)

Надеюсь, это поможет кому-то. Спасибо.

person kalpa    schedule 03.07.2020