如何在SWIFT 3中正确设置MPNowPlayingInfoCenter

How to properly set up the MPNowPlayingInfoCenter in Swift 3(如何在SWIFT 3中正确设置MPNowPlayingInfoCenter)
本文介绍了如何在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上打印了globalPositionNumberglobalDurationNumber,它们没有更改。不出所料。

然后我实现了:

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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Why local notification is not firing for UNCalendarNotificationTrigger(为什么没有为UNCalendarNotificationTrigger触发本地通知)
iOS VoiceOver functionality changes with Bundle Identifier(IOS画外音功能随捆绑包标识符而变化)
tabbar middle tab out of tabbar corner(选项卡栏中间的选项卡角外)
Pushing UIViewController above UITabBar(将UIView控制器推送到UITabBar上方)
Dropbox Files.download does not start when number of files in folder is gt; 1000(当文件夹中的文件数为1000时,Dropbox Files.Download不会启动)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)