2016-01-21 7 views
5

Kullanırken aramayı duraklatma Oynat/duraklat Bir müzik çalar uygulaması yapıyorum ve her şey yolunda gidiyor. Şu ana kadar sistem müzik çalarım kullanıyorum, ancak şimdi bir uygulama müzik çaları kullanmak yerine geçiş yapmak istiyorum ve bu da sorunlara yol açtığım - hayatım boyunca, benim nasıl elde edeceğimi anlayamıyorum. iOS kontrol merkezinden çağrılmak üzere oynat/duraklat geri arama. İşte benim ana görünümü kumandam kullanıyorum kodu:MPRemoteCommandCenter

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.musicPlayer = MPMusicPlayerController.applicationMusicPlayer() 

    self.registerForMediaPlayerNotifications() 
    UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 

    let commandCenter = MPRemoteCommandCenter.sharedCommandCenter() 

    commandCenter.previousTrackCommand.enabled = false 
    commandCenter.previousTrackCommand.addTarget(self, action: "previousTrack") 
    commandCenter.nextTrackCommand.enabled = false 
    commandCenter.nextTrackCommand.addTarget(self, action: "nextTrack") 
    commandCenter.togglePlayPauseCommand.enabled = true 
    commandCenter.togglePlayPauseCommand.addTarget(self, action: "playOrPauseMusic") 
    commandCenter.pauseCommand.addTarget(self, action: "playOrPauseMusic") 
    commandCenter.pauseCommand.enabled = true 
    commandCenter.playCommand.addTarget(self, action: "playOrPauseMusic") 
    commandCenter.playCommand.enabled = true 

    [...] 
} 


func previousTrack() { 
} 

func nextTrack() { 
} 

func playOrPauseMusic() { 
    print("playOrPause") 
} 
+0

Düşünebildiğim tek şey, geri çekilme geldiğinde nesnesinin artık mevcut olmamasıdır. Nesneyi bir yerlerde saklıyor musunuz? – fishinear

+0

commandCenter nesnesini mi kastediyorsunuz? Hayır, bunu hiçbir yerde saklamıyorum, çünkü sadece hedefleri ayarlamak/devre dışı bırakmak/devre dışı bırakmak vb. Için referansa ihtiyaç duyduğum bir küresel paylaşılmış örnek olacağını düşündüm. Bunu bir deneme olarak verebilirim ... – dflachbart

+0

Hayır, yani Kendini, bu kodu içeren nesne. Temizlenip temizlenmediğini görmek için 'dealloc'una bir sınır koy. – fishinear

cevap

1

deneyin böyle Info.plist için Required background modes ekleyerek: viewDidApper daki kod

Info.plist screenshot

+0

Evet Ben zaten bunu denedim, bir fark yaratmadı ... – dflachbart

-3

yer.

+0

benim için işe yaramadı. Senin için çalıştı mı? – evenodd

3

Aynı sorunu yaşadım ve togglePlayPauseCommand için geri arama çağrılmadığını fark ettim, ancak previousTrackCommand oldu. Bu yüzden bazı deneylerden sonra togglePlayPauseCommand'u kaldırarak ve bunun yerine playCommand ve pauseCommand için satır içi geri çağrıları uygulayarak çalışıyorum - lütfen özel seçicilerin kullanılmadığını, satır içi geri aramalar olması gerektiğini unutmayın.

let commandCenter = MPRemoteCommandCenter.shared() 

commandCenter.playCommand.addTarget { (commandEvent) -> MPRemoteCommandHandlerStatus in 
    moviePlayer.prepareToPlay() 
    moviePlayer.play() 
    return MPRemoteCommandHandlerStatus.success 
} 

commandCenter.pauseCommand.addTarget { (commandEvent) -> MPRemoteCommandHandlerStatus in 
    moviePlayer.pause() 
    return MPRemoteCommandHandlerStatus.success 
}