ios - 使用 MPMusicPlayerApplicationController 时如何更新 MPNowPlayingInfoCenter

标签 ios swift mpnowplayinginfocenter

我正在尝试使用我正在从 Apple Music 播放的轨道的歌曲信息来更新 MPNowPlayingInfoCenter。我做了以下事情:

将我的背景模式设置为:“音频、Airplay 和画中画”,

正确设置我的AVAudioSession类别:

let session = AVAudioSession.sharedInstance()

do {
    try session.setCategory(AVAudioSessionCategoryPlayback, with: [])
    try session.setActive(true)
} catch let error as NSError {
    print("Failed to set the audio session category and mode: \(error.localizedDescription)")
}

设置 MPRemoteCommandCenter 以响应远程命令:

let commandCenter = MPRemoteCommandCenter.shared();
commandCenter.playCommand.isEnabled = true
commandCenter.playCommand.addTarget {event in
    self.player.play()
    return .success
}
commandCenter.pauseCommand.isEnabled = true
commandCenter.pauseCommand.addTarget {event in
    self.player.pause()
    return .success
}
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget {event in
    self.goForward()
    return .success
}
commandCenter.previousTrackCommand.isEnabled = true
commandCenter.previousTrackCommand.addTarget {event in
    self.goBack()
    return .success
}

并在开始时和有播放事件时使用正确的信息更新 MPNowPlayingInfoCenter:

let info: [String:Any] = [
    MPMediaItemPropertyAlbumTitle : albumTitle,
    MPNowPlayingInfoCollectionIdentifier : albumId,
    MPMediaItemPropertyArtist : artistName,
    MPNowPlayingInfoPropertyMediaType : mediaType,
    MPMediaItemPropertyPersistentID : trackId,
    MPMediaItemPropertyTitle : trackTitle,
    MPMediaItemPropertyPlaybackDuration : trackDuration,
    MPNowPlayingInfoPropertyExternalContentIdentifier : trackId,
    MPNowPlayingInfoPropertyPlaybackRate : isPlaying ? 1.0 : 0.0,
    MPNowPlayingInfoPropertyPlaybackProgress : 0.5,
    MPMediaItemPropertyArtwork : MPMediaItemArtwork(boundsSize: CGSize(width: 100, height: 100), requestHandler: { (size: CGSize) -> UIImage in
        return UIImage(named: "play")! // dummy purposes
    })
]

let infoCenter = MPNowPlayingInfoCenter.default()
infoCenter.nowPlayingInfo = info
infoCenter.playbackState = isPlaying ? .playing : .paused

我还需要做什么才能让歌曲信息显示在控制中心和锁定屏幕上?

最佳答案

事实证明,该代码 100% 正确,但在 iOS 11(11.3 之前)中存在错误。随着本周 11.3 的正式发布,上面的代码现在可以按照 Apple 预期的方式与 MPMusicPlayerApplicationController 一起使用。

关于ios - 使用 MPMusicPlayerApplicationController 时如何更新 MPNowPlayingInfoCenter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49480531/

相关文章:

ios - Swift 2 中的 MPNowPlayingInfoCenter nowPlayingInfo 错误

ios - 如何在 swift 的辅助功能中使用点击手势?

ios - 如何给 CALayer() 添加渐变色

ios - 在 iPad 锁屏(背景)上显示 AVAudioplayer 持续时间和耗时

json - 如何临时保存解析后的JSON数据?

swift - 以编程方式更改 View 以左对齐或右对齐

ios - 有没有办法阻止 AVPlayerViewController 通过 MPNowPlayingInfoCenter 更新锁屏?

ios - 照片错误 : Unable to obtain assetsd XPC proxy 是什么意思

ios - Swift - 如何使用字典为 tableView 单元格提供文本?

iphone - 对初级 iOS 应用程序的改进