iOS 4.3.3 で問題なく動作するアプリがあります。しかし、iOS 5 でいくつかの問題があることがわかりました。
このアプリには 4 つのビュー コントローラーがあります。リモートコントロールの機能を実現するために、各View Controllerに次のコードを追加します。問題は、View Controller を初めて開いたときです。アプリをバックグラウンドで実行したり、画面をロックしたりしても、リモコンのボタンはうまく機能します。しかし、別のView Controllerをクリックして前の画面に戻ると、リモコンが機能しなくなります。しかし、毎回 canBecomeFirstResponder 関数が呼び出されました。
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; を入れようとさえします。デリゲート関数で (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 動作しません。
なぜこれが起こっているのかわかりません。それは私を数日間苦しめました。複数のView Controllerでリモートコントロール機能を実現するより良い方法はありますか?
ところで、UIBackgroundModes オーディオ キーを info.plist に追加しました。そして、このアプリはバックグラウンドでうまく機能します。
どんな助けでも大歓迎です。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)viewWillAppear:(BOOL)animated {
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[[UIApplication sharedApplication] endReceivingRemoteControlEvents];
[self resignFirstResponder];
}
- (BOOL) canBecomeFirstResponder {
NSLog(@"Can be first responder!");
return YES;
}
- (void)remoteControlReceivedWithEvent:(UIEvent *)event
{
if (event.subtype == UIEventSubtypeRemoteControlTogglePlayPause) {
NSLog(@"UIEventSubtypeRemoteControlTogglePlayPause");
[self playAndpause:nil];
}
}