我正在尝试正确设置已播放时间。当调用 player.seek 函数或暂停轨道时,不会更新 nowplayinginfocenter 已用时间。我使用 setNowPlaying() 初始化 nowplayinginfocenter,然后在信息中心寻找轨道更新时调用 setNowPlayingCurrentTime。
但是,当调用此方法时,耗时会重置为 0。
任何建议都会非常有用。
private func setNowPlaying(track: Track) {
//set now playing info center
if NSClassFromString("MPNowPlayingInfoCenter") != nil {
//artwork
var url = NSURL(string: track.artworkUrl!)
var data = NSData(contentsOfURL: url!)
var image = UIImage(data: data!)
var albumArt = MPMediaItemArtwork(image: image)
var songInfo: NSMutableDictionary = [
MPMediaItemPropertyTitle: track.title!,
MPMediaItemPropertyArtwork: albumArt,
MPMediaItemPropertyArtist: track.userName!,
MPMediaItemPropertyPlaybackDuration: track.duration!,
MPNowPlayingInfoPropertyPlaybackRate: 0
]
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo as NSObject as! [NSObject : AnyObject]
}
if (AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)) {
println("Receiving remote control events")
UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
} else {
println("Audio Session error.")
}
}
private func setNowPlayingCurrentTime(track: Track, time: Float64) {
var songInfo: NSDictionary = MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo
songInfo.mutableCopy().setValue(Double(time), forKey: MPNowPlayingInfoPropertyElapsedPlaybackTime)
println("test")
println(songInfo.mutableCopy().valueForKey(MPNowPlayingInfoPropertyElapsedPlaybackTime))
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = songInfo.mutableCopy() as! NSObject as! [NSObject : AnyObject]
}
最佳答案
我是按照以下方式 (Swift 2) 进行的 - 关键是在播放/暂停时正确设置属性。
func play() {
if self.player.currentItem != nil {
player.play()
//mpnowplaying info center
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime())
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 1
} else {
loadTrackToPlayer()
player.play()
//mpnowplaying info center
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime())
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 1
}
}
func pause() {
if self.player.currentItem != nil {
player.pause()
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 0
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime())
}
}
关于ios - MPNowPlayingInfoPropertyElapsedPlaybackTime 设置不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31673181/