Как включить управление iPod в фоновом режиме для управления музыкой, отличной от iPod, в iOS 4?

Хороший пример того, что я пытаюсь сделать, реализован в последней версии приложения Spotify для iPhone (похоже, у Pandora есть такая же функция).

Когда Spotify работает в фоновом режиме, двойное нажатие открывает «многозадачную док-станцию», где элементы управления ipod (воспроизведение / пауза, перемотка вперед и т. Д.) Позволяют управлять воспроизведением музыки Spotify (а не приложением ipod). Кроме того, когда iphone / ipod touch заблокирован, двойное касание отображает аналогичные элементы управления воспроизведением.

Если вы не понимаете, что я имею в виду, вот статья с снимками экрана: http://www.wired.com/gadgetlab/2010/07/spotify-updated-for-ios4-ready-to-replace-ipod/

В моем текущем приложении музыка транслируется с сервера (с использованием AudioStreamer Мэтта Галлахера). Мне удалось сохранить фоновую музыку. Теперь я хотел бы связать свое воспроизведение с «многозадачной док-станцией» / экраном блокировки.

Следует ли мне использовать [MPMusicPlayerController iPodMusicPlayer]? Как мне продолжить?

Бонусный вопрос: если вы скажете мне, как изменить значок ipod на значок моего приложения в «многозадачной док-станции» (Spotify тоже использовал этот трюк ...), это будет УДИВИТЕЛЬНО.

Любая помощь приветствуется, спасибо.


person Max    schedule 07.07.2010    source источник


Ответы (3)


Проблема решена.

Короче говоря, чтобы включить событие удаленного управления, 1) используйте:

- (void)remoteControlReceivedWithEvent:(UIEvent *)theEvent

и 2) поместите это ваш контроллер представления:

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
    [self becomeFirstResponder];
}
- (BOOL)canBecomeFirstResponder {
    return YES;
}

Я должен отдать должное Гранту. Он разветвил AudioStreamer Мэтта Галлахера, включив все улучшения ios4 (фоновый звук и работающие пульты дистанционного управления). Вы можете найти его исходники вместе с рабочим образцом на github: http://github.com/DigitalDJ/AudioStreamer

Что касается значка: как только вы используете beginReceivingRemoteControlEvents, значок автоматически переключается на значок вашего приложения. Блестяще!

person Max    schedule 09.07.2010
comment
Спасибо! Но вы кое-что забыли. Несмотря на то, что я скорректировал свой код (добавив remoteControlReceivedWithEvent и прочее внутри viewDidAppear), при нажатии кнопок предыдущий / воспроизведение / пауза / следующий в элементах управления ipod ничего не происходило. Недостающий кусок был, мне нужен был этот метод: - (BOOL) canBecomeFirstResponder {return YES; } - person Jonny; 19.08.2010
comment
Придется комментировать еще раз. Я думал, что все вышеперечисленное исправит это, но даже после успешного выполнения этого несколько раз, бывают случаи, когда события просто не доходят до контроллера представления, где я сделал beginFirstResponder и все такое. Как будто он просто перестает работать в какой-то момент, и я еще не понял, что может быть причиной проблемы. - person Jonny; 19.08.2010
comment
Вы нашли какое-нибудь решение? в моем подклассе MPMoviePlayerViewController метод remoteControlReceivedWithEvent не вызывается ... - person Faizan S.; 01.08.2011
comment
кто-нибудь знает, как передать название музыки, которая будет отображаться на экране блокировки, как это делает айпод? - person Roberto Ferraz; 20.09.2011
comment
Вы знаете какое-нибудь другое приложение, которое делает это? Я не уверен, что это возможно. Я использую Spotify прямо сейчас, и не похоже, что он будет отображать заголовок ... Но если вы знаете, что это возможно, мне определенно интересно, как это сделать. - person Max; 20.09.2011
comment
вы использовали applicationmusicplayer или ipodmusicplayer? - person Eric; 20.04.2012
comment
@Eric Нет. Я использовал только AudioStreamer Мэтта Галлахера, поскольку мне нужно было транслировать радио. - person Max; 20.04.2012
comment
Вам не хватает одного * в - (void)remoteControlReceivedWithEvent:(UIEvent)theEvent. Здесь: (UIEvent *). - person mAu; 22.05.2012
comment
@RobertoFerraz Чтобы показать текущее название и обложку альбома для музыки, которую играет ваше приложение, вы можете использовать MPNowPlayingInfoCenter - это новинка iOS 5. - person Udi; 29.05.2012

Вот документация:

http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/RemoteControl/RemoteControl.html.

Однако обратите внимание, что это будет работать только тогда, когда у вас есть активный аудиосеанс в вашем приложении.

Я использую его с AVAudioSession с AVAudioSessionCategoryPlayback категорией, а AVAudioPlayer и "удаленное управление" работают только тогда, когда у меня активен AVAudioSession и создан AVAudioPlayer объект.

person grzaks    schedule 06.05.2011

Элементы управления изменятся для вашего приложения, если вы используете новый API фонового звука. Информацию можно найти здесь. В частности, разделы о фоновом звуке.

person Elfred    schedule 07.07.2010
comment
Я читал эту страницу уже несколько раз. Кажется (как и для фонового звука), что после того, как UIBackgroundModes настроен на звук, элементы управления должны работать сами по себе. По моему опыту, это не так. Я предполагаю, что проблема в том, что я транслирую музыку, а не проигрываю ее с устройства, или, возможно, я что-то пропустил. Возможно, мой Audiostreamer настроен неправильно. Чтобы быть более конкретным: для всех, кому когда-либо удавалось это сделать, использовали ли вы [musicPlayer beginGeneratingPlaybackNotifications] и подключали следующие уведомления к своему собственному потоковому проигрывателю? - person Max; 08.07.2010
comment
Вы должны использовать AVAudioSessions. - person Elfred; 08.07.2010