2017-02-15 6 views
0

J'écris une application qui utilise les deux AVAudioPlayer pour lire des fichiers mp3 locaux et MPMusicPlayerController pour lire le système/Apple musique/musique iTunes. Je maintiens un nowPlayingMP3Item personnalisé qui est en cours de définition après avoir joué la chanson en utilisant AVAudioPlayer.AVAudioPlayer étant interrompu par MPMusicPlayerController

je pouvais vérifier l'état de lecture de la MusicController, mais je aurais besoin de recharger l'interface utilisateur si elle a changé de mp3 de la musique du système ...

Est-il possible d'observer (peut-être la session audio) ou quelque chose et de déterminer si la musique mp3 ou système joue et mettre à jour l'interface utilisateur en conséquence?

Merci pour toute aide

+1

Avez-vous essayé d'écouter les notifications 'AVAudioSessionInterruptionNotification'? –

+0

oui, juste essayé. fonctionne très bien :) merci – xCoder

Répondre

0

En cas d'interruption, l'audio sera mis en pause et votre session audio seront désactivées. Si votre application contient une interface de lecture, vous devrez mettre à jour l'interface. Lorsque l'interruption se termine, vous pouvez activer la session audio et reprendre la lecture de l'audio.

NotificationCenter.default.addObserver(forName: .AVAudioSessionInterruption, object: nil, queue: nil) { n in 
    let why = AVAudioSessionInterruptionType(rawValue: n.userInfo![ AVAudioSessionInterruptionTypeKey] as! UInt)! 
    if why = = .began { 
     // began 
    } 
    else { 
     // ended 
    } 
}