ios - MPNowPlayingInfoPropertyElapsedPlaybackTime 设置不正确

标签 ios swift

我正在尝试正确设置已播放时间。当调用 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/

相关文章:

ios - UITableView 自定义单元格选项无法修改源变量

ios - 什么定义了 UITableViewCell 中 CollectionViewCell 的大小?

iphone - 方向变化期间平滑的纵横比变化

ios - 获取网络请求后无法在 IBAction 中执行任何代码

iOS 应用程序因苹果测试而崩溃

ios - 使用 Text Kit 将基线与大行高的字符对齐

ios - Swift 必须调用父类(super class) uiinputviewcontroller 的指定初始化器

iphone - iOS:无需离开应用程序即可连接到 Facebook 进行授权

ios - 删除标签栏项目之间的间距(左右)

ios - Objective-C 类中无法访问 Swift 类?