ios – MPNowPlayingInfoPropertyElapsedPlaybackTime未正确设置

我正在尝试正确设置已播放的播放时间.当调用player.seek功能或暂停曲目时,不会更新Nowplayinginfocenter经过的时间.我现在使用setNowPlaying()初始化inffinenter,然后在寻求在信息中心更新它时调用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())

        }
  }

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...