В настоящее время я пытаюсь настроить фоновый звук для приложения, которое я разрабатываю для iOS 4. Однако в приложении нет выделенного музыкального проигрывателя viewController
, в отличие от других приложений для фонового звука, таких как Pandora, которые делает задачу немного более запутанной.
Я правильно установил соответствующие настройки Info.plist
и в моем делегате приложения есть объект AVAudioPlayer
, доступный из любого места. Когда пользователь воспроизводит песню, я заменяю AVAudioPlayer
на новую, инициализированную песней, и играю ее. Все это прекрасно работает, за исключением того, что теперь я понятия не имею, как поддерживать события удаленного управления.
Основываясь на документации Apple, у меня есть это:
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
switch(event.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
if([iPhoneAppDelegate backgroundAudioPlayer].playing)
[iPhoneAppDelegate pauseBackgroundAudioPlayer];
else
[iPhoneAppDelegate playBackgroundAudioPlayer];
break;
}
}
Дело в том, куда я это положу? Документация Apple, кажется, предполагает, что это должно быть где-то в контроллере представления, но у моего приложения есть много контроллеров представления и контроллеров навигации. Куда бы я ни пытался вставить это, по какой-то причине нажатие кнопки Toggle Play / Pause на пульте дистанционного управления лотка для многозадачности либо приводит к тому, что песня на мгновение приостанавливается, а затем прерывается, либо как-то заставляет песню проигрываться дважды.