2016-11-15 4 views
0

Я создаю музыкальный плеер (в Swift 3), который использует MPMediaItems и MPMediaPlayerController. Я не могу на всю жизнь понять, как управлять музыкой из экрана блокировки или центра уведомлений ...iOS Swift - MPCommandCenter & NowPlayingInfoCenter Управление музыкой на экране блокировки

Я прочитал каждую статью, которую я могу найти в MPRemoteCommandCenter и MPNowPlayingInfoCenter, и я не могу заставить ее работать.

Я включил воспроизведение фоновой музыки, в настоящее время музыка продолжает играть за пределами приложения, но не получает удаленных команд.

Ниже приведен код, в настоящее время используется

На мой взгляд Знали нагрузки я называю следующую функцию

let player = MPMusicPlayerController.applicationMusicPlayer() 
let commandCenter = MPRemoteCommandCenter.shared() 

func configureCommandCenter() { 
    print("Enter configuration") 
    self.commandCenter.playCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("Play") 
     sself.player.play() 
     self?.getNowPlayingItem() 
     return .success 
    } 

    self.commandCenter.pauseCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("Pause") 
     sself.player.pause() 
     self?.getNowPlayingItem() 
     return .success 
    } 

    self.commandCenter.nextTrackCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("next") 
     sself.player.skipToNextItem() 
     self?.getNowPlayingItem() 
     return .success 
    } 

    self.commandCenter.previousTrackCommand.addTarget { [weak self] event -> MPRemoteCommandHandlerStatus in 
     guard let sself = self else { return .commandFailed } 
     print("Prev") 
     sself.player.skipToPreviousItem() 
     self?.getNowPlayingItem() 
     return .success 
    } 

} 

Повторим мой проект компилируется нормально, играет СМИ, продолжает играть средства массовой информации, когда приложение не фокус и когда телефон заблокирован, однако из приложения не видно никаких команд, что приводит к тому, что приложение не может контролироваться с экрана блокировки или центра уведомлений. Любая помощь будет принята с благодарностью.

Я также хотел бы упомянуть, что я просмотрел документы API Apple, относящиеся как к RemoteCommands, так и к InfoCenter.

Я пропустил какой-то ключевой шаг, чтобы получить удаленные команды, зарегистрированные из приложения?

+0

Не имеет значения, но вы должны удалить свой 'viewDidAppear'. Это не имеет значения. Вы комбинируете старый метод pre-MPRemoteCommandCenter с новым способом MPRemoteCommandCenter. Нет смысла делать это. – matt

+0

Это две соответствующие функции, которые я использую в настоящее время для персонажа ... и они действительно компилируются, можете ли вы подробнее рассказать о том, почему вы думаете, что они не будут? Возможно, это часть того, почему я не получаю команды? – Jerland2

+0

@matt, спасибо Я сниму функцию, о которой я не знал, что был старый и новый способ, это мой первый опыт работы с этими библиотеками. – Jerland2

ответ

1

Проблема в том, что ваш плеер MPMusicPlayerController.applicationMusicPlayer(). Вы не можете использовать музыкальный плеер приложения как цель удаленного управления.

Если вы хотите использовать возможности пульта дистанционного управления, вам нужен ваш плеер, чтобы быть чем-то вроде AVAudioPlayer.

+0

Вот рабочий проект, который вы можете скачать и запустить, если хотите поэкспериментировать: https://github.com/mattneub/Programming-iOS-Book-Examples/tree/61f0c753a080040e4a74b912e6c18dd97fe8bcaa/bk2ch14p644remote/ch27p912ducking – matt

+0

О, ну, спасибо, извините, извините, о неудаче javascript, он переформатировал мой код, он был исправлен. Правильно ли я утверждаю, что при использовании AVAudioPlayer вы получите возможность использовать возможности дистанционного управления, а затем помешать использованию музыки Apple Music (DRM)? Я придерживаюсь этого предположения, потому что треки в библиотеке пользователей из Apple Music не имеют URL-адреса и поэтому не могут быть воспроизведены с помощью AVAudioPlayer? – Jerland2

+1

Я считаю, что вы правы, потому что, если вы сможете пройти DRM через собственный звуковой процессор, вы будете красть звук. Если вы хотите использовать Apple Music _and_ remote control, то я _think_ вы можете просто использовать 'systemMusicPlayer' (также известный как приложение Music). - Однако, обратите внимание, что проблема с Apple Music не была в вашем первоначальном вопросе. Это действительно представляет собой совершенно новый вопрос (и не стесняйтесь задавать его как новый вопрос). – matt

Смежные вопросы