我的应用程序支持来自外部音乐应用程序(如 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] beginReceivingRemoteControlEvents];
直到这里,一切正常:应用程序现在播放 iPod 库中的音乐(当将类别设置为播放时,Pandora 已停止)。
单击耳机上的中心按钮时出现我的问题。在上面描述的序列中,当点击中心按钮时,interruptListenerCallback 被调用!我期待调用 remoteControlReceivedWithEvent 回调。
所以,我的问题是:你如何确保外部音乐播放器不再处理远程控制事件,并且我的应用程序得到它们?
在以前从未玩过 Pandora 的不同用例中,一切正常:我的应用程序按预期接收远程控制事件;所以我知道这部分代码有效。
谢谢