【问题标题】:How to properly set up the MPNowPlayingInfoCenter in Swift 3如何在 Swift 3 中正确设置 MPNowPlayingInfoCenter
【发布时间】:2017-04-09 20:02:28
【问题描述】:

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 上打印出globalPositionNumberglobalDurationNumber 并且它们没有改变。正如预期的那样。

然后我实现了:

func audioStreaming(_ audioStreaming: SPTAudioStreamingController, didChangePlaybackStatus isPlaying: Bool) {

    if !isPlaying {
        setInfoCenterCredentials(globalPositionNumber, globalDurationNumber, 0)
    }
}

现在有问题。点击暂停,会导致计时器被重置并从 0 开始,一旦恢复。

问题 #2

如果我从应用程序中向上滑动控制面板,计数器会同步。如果我使用主页按钮离开应用程序并从主屏幕向上滑动控制面板,计数器会从零开始计数。

问题 #3

如果我从主屏幕点击暂停/前进/后退按钮,它们运行良好。如果我在我的应用处于活动状态时向上滑动控制面板并按下按钮,则不会发生任何事情。

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

tl;dr

问题1:控制面板的计时器使用MPNowPlayingInfoPropertyPlaybackRate 1 重置或未设置则不停止。

问题 2:如果在赛道中离开 App,时间计数器会从零开始。

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

【问题讨论】:

  • 不应该。该框架运行良好
  • 你在哪里定义时间计数器?
  • 喜欢在func audioStreaming(_ audioStreaming: SPTAudioStreamingController, didChangePosition position: TimeInterval) {func audioStreaming(_ audioStreaming: SPTAudioStreamingController, didChangePosition position: TimeInterval) {发布的问题
  • isChangingProgress 如何管理?这似乎是控制计时器的变量。
  • 加载新曲目时,此 var 将更改为 true,播放后将更改为 false。它也是一个全局变量。

标签: ios swift spotify


【解决方案1】:

答案就更简单了……

这是模拟器的问题...所有的错误都只出现在模拟器上。 一切在实际设备上运行良好。

【讨论】:

    【解决方案2】:

    我建议重新导入框架以确保没有集成问题。

    由于 GitHub 上没有负面报道,而且代码看起来还不错,这可能只是一个集成问题。

    希望这会有所帮助:)

    【讨论】:

    • 我已将赏金授予您。总比浪费好。感谢你的付出。但答案非常简单......希望我能在开始赏金之前尝试一下-.-
    猜你喜欢
    • 2017-10-07
    • 2014-08-07
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    相关资源
    最近更新 更多