如何在SWIFT 3中正确设置MPNowPlayingInfoCenter

编程入门 行业动态 更新时间:2024-10-24 18:25:52
本文介绍了如何在SWIFT 3中正确设置MPNowPlayingInfoCenter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

(tl;dr在底部)

目前我正在通过以下方式设置属性:

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] }

与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) }

到目前为止,该功能运行得很好。

问题1

当我点击暂停按钮时:

音乐停止了,但时间仍在倒计时。我已经在它们的didSet上打印了globalPositionNumber和globalDurationNumber,它们没有更改。不出所料。

然后我实现了:

func audioStreaming(_ audioStreaming: SPTAudioStreamingController, didChangePlaybackStatus isPlaying: Bool) { if !isPlaying { setInfoCenterCredentials(globalPositionNumber, globalDurationNumber, 0) } }

现在有问题了。点击暂停,将重置计时器,并在恢复后从0开始计时器。

问题2

如果我从应用程序内向上滑动控制面板,计数器将同步。如果我带着Home键离开应用程序,并从主屏幕向上滑动控制面板,计数器将从零开始计数。

问题3

如果我在主屏幕上点击暂停/前进/后退按钮,它们工作正常。如果我在应用程序处于活动状态的情况下向上滑动控制面板,并按下按钮,则不会有任何反应。

我错过了什么?非常感谢您的帮助

tl;dr

问题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 } } }

其他所有内容都在setInfoCenterCredentials

中设置 推荐答案

答案更简单...

这是模拟器的问题...所有的虫子都只出现在模拟器上。一切在实际设备上都工作正常。

更多推荐

如何在SWIFT 3中正确设置MPNowPlayingInfoCenter

本文发布于:2023-10-16 11:53:41,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1497479.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:正确   如何在   SWIFT   MPNowPlayingInfoCenter

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!