Как получить управление аудио на экране блокировки/Центр управления от AVAudioPlayer в Swift

новое в разработке iOS, так что здесь идет. У меня есть приложение, которое воспроизводит аудио - я использую AVAudioPlayer для загрузки отдельных файлов по имени в активы приложения. Я не хочу запрашивать библиотеку пользователя, только предоставленные файлы. Отлично работает, но я хочу, чтобы пользователь мог нажать на паузу и регулировать громкость с экрана блокировки.

func initAudioPlayer(file:String, type:String){
    let path = NSBundle.mainBundle().pathForResource(file, ofType: type)!
    let url = NSURL(fileURLWithPath: path)
    let audioShouldPlay = audioPlaying()
    do{
        try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
        try AVAudioSession.sharedInstance().setActive(true)
        let audioPlayer:AVAudioPlayer = try AVAudioPlayer(contentsOfURL: url)
        audioPlayer.volume = slider.value
        audioPlayer.numberOfLoops = -1
        audioPlayer.prepareToPlay()
        if(audioShouldPlay){
            audioPlayer.play()
//                let mpic = MPNowPlayingInfoCenter.defaultCenter()
//                mpic.nowPlayingInfo = [MPMediaItemPropertyTitle:"title", MPMediaItemPropertyArtist:"artist"]
        }
    }
    catch{}
}

использование AVAudioSession и MPNowPlayingInfoCenter были просто эксперименты с чтением других связанных сообщений.

фоновый режим включен для аудио в моем приложении plist file

3 ответов


вам нужно вызвать beginReceivingRemoteControlEvents (), иначе он не будет работать на фактическом устройстве.

Swift 3.1

UIApplication.shared.beginReceivingRemoteControlEvents()

Если вы хотите указать пользовательские действия для MPRemoteCommandCenter:

let commandCenter = MPRemoteCommandCenter.shared()
commandCenter.nextTrackCommand.isEnabled = true
commandCenter.nextTrackCommand.addTarget(self, action:#selector(nextTrackCommandSelector))

func myplayer(file:String, type:String){
let path = NSBundle.mainBundle().pathForResource(file, ofType: type)!
let url = NSURL(fileURLWithPath: path)
let audioShouldPlay = audioPlaying()
do{
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
    try AVAudioSession.sharedInstance().setActive(true)
    let audioPlayer:AVAudioPlayer = try AVAudioPlayer(contentsOfURL: url)
    audioPlayer.volume = slider.value
    audioPlayer.numberOfLoops = -1
    audioPlayer.prepareToPlay()
    if(audioShouldPlay){
        audioPlayer.play()
//                let mpic = MPNowPlayingInfoCenter.defaultCenter()
//                mpic.nowPlayingInfo = [MPMediaItemPropertyTitle:"title", 
MPMediaItemPropertyArtist:"artist"]
        }
    }
    catch{}
}

на экране блокировки уже есть звуковые элементы управления (интерфейс "пульт дистанционного управления"). Если вы хотите, чтобы они контролировали аудио вашего приложения, вам нужно сделать ваше приложение пульт дистанционного управления элемент, как описано в документация Apple.