- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在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 音乐继续播放 - 即使当我的应用程序在后台播放我自己的音乐(并使用硬件解码器)时也是如此。
(并且,反过来 - 如果我的应用程序在后台没有播放音乐,我想检测它返回时我是否可以开始播放音乐)。
我该怎么做? (最好不要突然切断我的音频,保持通常发生的漂亮淡出。)
编辑:我还应该指出,我在主线程之外完成所有音频工作。
最佳答案
为什么不直接在您的应用委托(delegate)多任务消息中实现它呢?在后台,暂停您的音频(如有必要,存储当前播放位置),并在应用程序恢复焦点时将其重新旋转。
再澄清一点:通过重置音频播放器状态在您的委托(delegate)中响应 applicationDidEnterBackground:,并通过将其设置为现在的方式来响应 applicationWillEnterForeground:。您还可以让设置音频播放的对象通过 NSNotificationCenter 响应 UIApplicationWillEnterBackgroundNotification/UIApplicationWillEnterForegroundNotification,这可能会更容易一些,但代价是从您的应用程序委托(delegate)类中抽象出您的应用程序在后台执行的操作。
关于iphone - 鉴于多任务处理,我如何在 iOS 中处理其他音频播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3996179/
我是一名优秀的程序员,十分优秀!