(tl;博士在底部)
目前我正在通过以下方式设置属性:
let mpic = MPNowPlayingInfoCenter.default()
func setInfoCenterCredentials(_ postion: NSNumber, _ duration: NSNumber, _ playbackState: Int) {
let mySize = CGSize(width: 400, height: 400)
let albumArt = MPMediaItemArtwork(boundsSize:mySize) { sz in
return getCoverImage()
}
mpic.nowPlayingInfo = [MPMediaItemPropertyTitle: globalTrackName,
MPMediaItemPropertyArtist: globalArtistName,
MPMediaItemPropertyArtwork: albumArt,
MPNowPlayingInfoPropertyElapsedPlaybackTime: postion,
MPMediaItemPropertyPlaybackDuration: duration,
MPNowPlayingInfoPropertyPlaybackRate: playbackState]
}
Run Code Online (Sandbox Code Playgroud)
与Spotify iOS SDK一起使用:
func audioStreaming(_ audioStreaming: SPTAudioStreamingController, didChangePosition position: TimeInterval) {
if self.isChangingProgress {
return
}
let position = Float(positionDouble / durationDouble)
let duration = Float((sptAudioStreamCtr?.metadata.currentTrack!.duration)!)
globalPositionNumber = NSNumber(value: position)
globalDurationNumber = NSNumber(value: duration)
setInfoCenterCredentials(globalPositionNumber, globalDurationNumber, 1)
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,这非常有效.
问题#1
当我按下暂停按钮时:
音乐停止了,但时间不断倒计时.我已经打印出来globalPositionNumber并globalDurationNumber在他们didSet和他们没有得到改变.正如所料.
然后我实施了:
func audioStreaming(_ audioStreaming: SPTAudioStreamingController, didChangePlaybackStatus isPlaying: Bool) {
if !isPlaying {
setInfoCenterCredentials(globalPositionNumber, globalDurationNumber, 0)
}
}
Run Code Online (Sandbox Code Playgroud)
现在问题.点击暂停,导致定时器被重置并从0开始,一旦恢复.
问题#2
如果我从App中向上滑动控制面板,则会同步计数器.如果我使用主页按钮离开应用程序并从主屏幕向上滑动控制面板,计数器将从零开始计数.
问题#3
如果我从主屏幕点击暂停/前进/后退按钮,它们运行良好.如果我在我的应用程序处于活动状态时向上滑动控制面板并且按下了按钮,则没有任何反应.
我错过了什么?非常感谢帮助
TL;博士
问题1:控制面板的时间控制器使用MPNowPlayingInfoPropertyPlaybackRate1 重置或未停止(如果未设置).
问题2:如果在轨道中离开应用程序,时间计数器将从零开始.
问题3:在应用程序处于活动状态时按控制面板上的操作按钮无效.
编辑:
override var canBecomeFirstResponder : Bool {
return true
}
override func remoteControlReceived(with event: UIEvent?) {
if let ctr = SPTAudioHandler.shared.audioCtrl {
let rc = event!.subtype
switch rc {
case .remoteControlTogglePlayPause:
ctr.setIsPlaying(!ctr.playbackState.isPlaying, callback: nil)
case .remoteControlPlay:
ctr.setIsPlaying(!ctr.playbackState.isPlaying, callback: nil)
case .remoteControlPause:
ctr.setIsPlaying(!ctr.playbackState.isPlaying, callback: nil)
case .remoteControlNextTrack:
globalBackForthInt = 1
getNextSpotifyTrack(SPTAudioHandler.shared.spotifyTracks, SPTAudioHandler.shared.playerView)
globalTrackIndexPath = globalTrackIndexPath + 1
case .remoteControlPreviousTrack:
getNextSpotifyTrack(SPTAudioHandler.shared.spotifyTracks, SPTAudioHandler.shared.playerView)
globalBackForthInt = -1
getNextSpotifyTrack(SPTAudioHandler.shared.spotifyTracks, SPTAudioHandler.shared.playerView)
globalTrackIndexPath = globalTrackIndexPath - 1
default:
break
}
}
}
Run Code Online (Sandbox Code Playgroud)
其他所有内容都已设置 setInfoCenterCredentials
| 归档时间: |
|
| 查看次数: |
3967 次 |
| 最近记录: |