2015-07-28 18 views
6

ayar değil. Player.seek işlevi çağrıldığında veya parça duraklatıldığında, şimdi oynatılaninfocenter geçen süre güncellenmez. Şimdi setNowPlaying() ile infocenter'ı oynatıyorum ve ardından parça bilgi merkezinde güncellemeyi istediğinde setNowPlayingCurrentTime'ı çağırıyorum.MPNowPlayingInfoPropertyElapsedPlaybackTime Ben doğru geçen çalma süresini ayarlamak için çalışıyorum doğru

Ancak bu çağrıldığında geçen zaman çok faydalı lütfen olacağını 0.

Herhangi bir tavsiye sıfırlanır alır.

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] 
} 

cevap

3

Bunu şu şekilde yaptım (Swift 2) - anahtar, oynatma/duraklatmadaki öznitelikleri doğru bir şekilde ayarlıyordu.

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()) 

     } 
    } 
2

Swift 3

if player.currentItem != nil { 
     MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) 
     MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 1 
    } 

Sen, hız değişiklikleri, duraklama bu ateş atlamak gerekir, duraklama vb

örneği.

if player.currentItem != nil { 
     MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyElapsedPlaybackTime] = CMTimeGetSeconds(player.currentTime()) 
     MPNowPlayingInfoCenter.default().nowPlayingInfo![MPNowPlayingInfoPropertyPlaybackRate] = 0 
    } 

Sen temizleyicinin hareketini güncellemeniz gerekmez, kilit ekranı sürece belirledik olarak sizin için kat hesaplamak nowPlayingInfo süreyi geri oynayacak.