私たちのアプリは、リモート コントロール イベントへの最初のレスポンダーになることで、リモート コントロールを使用するユーザー フォームを明示的にブロックします。ただし、iOS7 では、同じコードがコントロール センターの音楽コントロールをバイパスできません。
テストの結果、コントロール センターは、UIEventSubtypeRemoteControlPause と UIEventSubtypeRemoteControlPlay、および UIEventSubtypeRemoteControlTogglePlayPause を含むすべての音楽コントロール イベントをバイパスしたようです。
コントロールセンターがリモコン用の独自のプロトコルを持っているということですか、それとも iOS7 でリモコンイベントをインターセプトする方法が変わったということですか?
同じブロッキング コードは、iOS6 デバイスでも完全に機能します。これが私たちがすることです:
appDelegate にメソッドを追加しました。
(BOOL)canBecomeFirstResponder { YES を返します。}
これを applicationDidBecomeActive で呼び出します。
[[UIApplication sharedApplication] beginRecomingRemoteControlEvents];
// 自分自身をファーストレスポンダーに設定 [self becomeFirstResponder];
これを applicationWillResignActive で呼び出します
// リモコン イベント配信をオフにする [[UIApplication sharedApplication] endRecomingRemoteControlEvents];
// ファーストレスポンダとして辞任 [self rejectFirstResponder];
最後に追加
(void)remoteControlReceivedWithEvent:(UIEvent *)receivedEvent {
if (receivedEvent.type == UIEventTypeRemoteControl) {
switch (receivedEvent.subtype) {
case UIEventSubtypeRemoteControlTogglePlayPause:
NSLog(@"Received: UIEventSubtypeRemoteControlTogglePlayPause\n");
break;
case UIEventSubtypeRemoteControlPreviousTrack:
NSLog(@"Received: UIEventSubtypeRemoteControlPreviousTrack\n");
break;
case UIEventSubtypeRemoteControlNextTrack:
NSLog(@"Received: UIEventSubtypeRemoteControlNextTrack\n");
break;
case UIEventSubtypeRemoteControlPlay:
NSLog(@"Received: UIEventSubtypeRemoteControlPlay\n");
break;
case UIEventSubtypeRemoteControlPause:
NSLog(@"Received: UIEventSubtypeRemoteControlPause\n");
break;
case UIEventSubtypeRemoteControlStop:
NSLog(@"Received: UIEventSubtypeRemoteControlStop\n");
break;
default:
NSLog(@"Received: Some remove control events\n");
break;
}
}
}
任意のポインタをいただければ幸いです。