Я провел много исследований, как в Google, так и в StackOverflow. Все ответы, которые я нашел, не работают в iOS 7. Я начал писать новое приложение в iOS 7 SDK с Xcode 5.
Все, что я пытаюсь сделать, это воспроизвести аудио в приложении из файла, хранящегося в комплекте приложения (не из библиотеки музыки). Я хочу, чтобы звук воспроизводился в фоновом режиме и контролировался при блокировке экрана (в дополнение к Control Center).
Я установил ключ APPNAME-Info.plist
, UIBackgroundModes
, в аудио. Он не обрабатывает вещи в делегате приложения; все делается внутри ViewController
@interface ViewController : UIViewController <AVAudioPlayerDelegate>
В рамках реализации метода viewDidAppear:
я вызываю super, а затем следующий код:
// Once the view has loaded then we can register to begin receiving controls and we can become the first responder
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
В моем методе реализации viewWillDisappear:
у меня есть следующий код:
// End receiving events
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
Я также внедрил метод canBecomeFirstResponder
, который возвращает ДА. Затем я применил метод remoteControlReceivedWithEvent:
:
- (void)remoteControlReceivedWithEvent:(UIEvent *)event {
// If it is a remote control event handle it correctly
if (event.type == UIEventTypeRemoteControl) {
if (event.subtype == UIEventSubtypeRemoteControlPlay) {
[self playPauseAudio:self];
} else if (event.subtype == UIEventSubtypeRemoteControlPause) {
[self playPauseAudio:self];
} else if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) {
[self playPauseAudio:self];
}
}
}
Что меня смущает, так это то, что эта точная настройка отлично работает на iOS 6. На iOS 7 она не работает. Раньше это было так просто в iOS 6. Что-то принципиально изменилось в iOS 7 SDK. Что мне не хватает?