2015-07-28 8 views
6

Próbuję poprawnie ustawić upływający czas odtwarzania. Po wywołaniu funkcji player.seek lub wstrzymaniu utworu aktualny czas odtwarzania nie jest aktualizowany. Wstawiam teraz funkcję odtworzeniaśrodowiska za pomocą metody setNowPlaying(), a następnie wywołaj funkcję setNowPlayingCurrentTime, gdy utwór zostanie zaktualizowany w centrum informacyjnym.MPNowPlayingInfoPropertyElapsedPlaybackTime niepoprawne ustawienie

Jednak, gdy ten nazywa się czas, jaki upłynął, zostanie zresetowany do 0.

Wszelkie porady byłyby bardzo użyteczne proszę.

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

Odpowiedz

3

Zrobiłem to w następujący sposób (Swift 2) - klawisz poprawnie ustawił atrybuty podczas gry/pauzy.

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 
    } 

Trzeba by odpalić to na przerwie, należy pominąć, zmiany prędkości, itp

Przykład pauzie.

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

Nie trzeba aktualizować przepływ płuczki, ekran blokady obliczy czas dla Ciebie tak długo, jak masz ustawione odtwarzać czas w nowPlayingInfo.

Powiązane problemy