在
Audio Session Cookbook
有一节是关于
Checking if Other Audio is Playing During App Launch
".
我使用的是MonoTouch(但请随意给出一个Objective-C答案,API是相同的),因此该文档中的代码如下所示:
bool otherAudioPlaying = AudioSession.OtherAudioIsPlaying;
if(otherAudioPlaying)
AudioSession.Category = AudioSessionCategory.AmbientSound;
else
AudioSession.Category = AudioSessionCategory.SoloAmbientSound;
结果是,如果我的应用程序启动时播放iPod音乐,iPod音乐将继续播放,并阻止我使用硬件音频解码器(反正我不需要)。如果我的应用程序启动时没有iPod音乐播放,我可以使用硬件解码器。
然后我可以使用
otherAudioPlaying
决定是否开始播放我自己的音乐。
现在,在不支持多任务处理的较旧操作系统上,这一切都很好。但通过多任务处理,用户可以离开我的应用程序(将其背景化),开始在iPod上播放音乐,然后重新进入我的应用程序。然后他们的iPod音乐将被静音,我的音乐将再次开始播放。
我想要的是,当我的应用程序返回前台时,iPod音乐仍能继续播放——即使我的应用程序在后台播放我自己的音乐(并使用硬件解码器)。
(反过来,如果我的应用程序是在没有播放音乐的情况下启动的,我想检测一下,当它返回时,我是否可以开始播放音乐)。
我该怎么做?(最好不要突然切断我的音频,保持通常发生的良好淡出效果。)
编辑:我还应该指出,我做的所有音频工作都脱离了主线。