さて、私のアプリはビデオを再生するので、サウンドをバックグラウンドで再生し続けたいと思います。しかし、「ホーム」ボタンを押すと再生が停止します。iOS5.0.1を搭載したiPhone4sでテストしています
何が機能していますか?
- ビデオが再生されていて、画面をロックすると、再生が続きます、
- ロック画面のコントロールから再生を制御できます:次、前、再生、一時停止。
- 「ホーム」を押してから、マルチタスクバーから「リモコン」に移動すると、動作します。
どうしたの?
- 「ホーム」ボタンを押してもアプリの再生を続けたいのですが、押すと音声が止まります。
私が何をした:
- app.plistの「必要なバックグラウンドモード」に「オーディオ」を追加しました
アプリデリゲートのアプリケーションに次のコードを追加しました:didFinishLaunchingWithOptions:
NSError *setCategoryErr = nil;
NSError *activationErr = nil;
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error:&setCategoryErr];
[[AVAudioSession sharedInstance] setActive:YES error:&activationErr];
私のビューコントローラーでは、リモコンを受信するためのメソッドを実装しました。
- (BOOL)canBecomeFirstResponder {
return YES;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//End recieving events
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
[self play:nil];
break;
case UIEventSubtypeRemoteControlPreviousTrack:
[self actionPlaybackPreviousItem];
break;
case UIEventSubtypeRemoteControlNextTrack:
[self actionPlaybackNextItem];
break;
default:
break;
}
}
}
どうしてすべてがうまくいくのですか、これ?