2017-02-15 8 views
0

Я пишу приложение, которое использует как AVAudioPlayer для воспроизведения локальных mp3-файлов, так и MPMusicPlayerController для воспроизведения системы/Apple music/iTunes music. Я поддерживаю пользовательский nowPlayingMP3Item, который устанавливается после того, как я играю песню, используя AVAudioPlayer.AVAudioPlayer прерывается MPMusicPlayerController

Я мог бы проверить состояние воспроизведения MusicController, но мне нужно перезагрузить интерфейс, если он изменился из mp3 в системе музыки ...

Есть ли способ, чтобы наблюдать (возможно, аудио сеанс) или что-то, и определить, воспроизводится ли музыка mp3 или системная музыка, и соответствующим образом обновлять интерфейс?

Спасибо за любую помощь

+1

Вы пытались прослушивать уведомления «AVAudioSessionInterruptionNotification»? –

+0

Да, просто попробовал. отлично работает :) спасибо – xCoder

ответ

0

Когда прерывание, звук будет приостановлены и ваша звуковая сессия будет деактивирована. Если ваше приложение содержит игровой интерфейс, вам необходимо обновить интерфейс. Когда прерывание завершается, вы можете активировать сеанс аудио и возобновить воспроизведение звука.

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