在Audio Session Cookbook中有一节关于“在应用启动期间检查其他音频是否正在播放”。
我正在使用 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 音乐继续播放 - 即使我的应用程序在后台运行时正在播放我自己的音乐(并使用硬件解码器)。
(而且,反过来——如果我的应用程序在后台没有播放音乐,我想检测它返回时是否可以开始播放音乐)。
我怎样才能做到这一点?(最好不要突然切断我的音频,保持通常发生的良好淡出。)
编辑:我还应该指出,我所有的音频工作都是在主线程之外完成的。