私のアプリは、外部音楽アプリ (Pandora など) からのオーディオ、または AVPlayer を使用して iPod ライブラリから AVPlayerItem を再生するアプリ内からの再生をサポートしています。
私の AppDelegate では、次のように呼び出します: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
AudioSessionInitialize(NULL, NULL, interruptionListenerCallback, self);
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: nil];
UInt32 otherAudioIsPlaying;
UInt32 propertySize = sizeof (otherAudioIsPlaying);
AudioSessionGetProperty (
kAudioSessionProperty_OtherAudioIsPlaying,
&propertySize,
&otherAudioIsPlaying
);
if (otherAudioIsPlaying) {
NSLog(@"Allow Mixing for background music (like Pandora,...)");
UInt32 allowMixing = true;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (allowMixing), &allowMixing);
}
[[AVAudioSession sharedInstance] setActive: YES error: NULL];
...
割り込みにも登録することに注意してください。
そのため、Pandora の再生中にアプリを起動すると、Pandora は再生を続けます。
その後、ユーザーが iPod ライブラリから音楽を再生することを決定した場合、次のように呼び出します: [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback withOptions: 0 error: nil]; 確認のために、リモート コントロール イベントを受信するには、[self becomeFirstResponder]; を呼び出します。[[UIApplication sharedApplication] beginRecomingRemoteControlEvents];
ここまでは、すべて正常に動作しています。アプリは iPod ライブラリから音楽を再生します (カテゴリを再生に設定すると、Pandora が停止しました)。
ヘッドセットの中央のボタンをクリックすると問題が発生します。上記のシーケンスでは、中央のボタンをクリックすると、interruptionListenerCallback が呼び出されます。remoteControlReceivedWithEvent コールバックが呼び出されることを期待していました。
ですから、私の質問は次のとおりです。外部の音楽プレーヤーがリモート コントロール イベントを処理しなくなり、アプリがそれらを取得できるようにするにはどうすればよいですか??
Pandora をこれまでプレイしたことがない別のユース ケースでは、すべて正常に動作します。アプリはリモート コントロール イベントを期待どおりに受け取ります。コードのこの部分が機能することはわかっています。
ありがとう