菜鸟教程小白 发表于 2022-12-12 16:38:43

ios - 当另一个应用程序开始/停止播放音频时可以通知我的应用程序吗?


                                            <p><p>我的 iOS 游戏有音乐和音效。我想让用户听他们自己的音乐来代替游戏的背景音乐。 </p>

<p>一个简单的解决方案是添加一个禁用游戏背景音乐的新菜单项。但是,我想避免创建新的菜单项,除非我确信这种方法对用户来说更糟。 </p>

<hr/>

<h1>我目前的做法:</h1>

<ol>
<li>将 Audio Session 类别设置为 <code>AVAudioSessionCategoryAmbient</code> 以允许将游戏音频与 iPod(或其他音乐应用)播放混合。</li>
<li>在 <code>applicationDidBecomeActive</code> 中,勾选 <code>[ isOtherAudioPlaying]</code>,如果后台正在播放其他应用,则关闭游戏音乐。</li>
</ol>

<p>这似乎在大多数情况下都有效。当游戏启动时,它会中断背景音乐应用程序的播放。如果你想播放自己的音乐,那么你必须特意返回并在第三方音乐应用程序中按下播放,或者使用 iOS 7 的向上滑动控制面板。否则,游戏自己的音乐将接管。</p>

<p>这有几个缺陷:</p>

<ol>
<li><strong>它不会检测</strong>第三方音乐应用程序的播放何时由 iPhone/iPod 耳塞内置的点击按钮 Remote 开始/停止。</li>
<li>虽然它适用于 iPod 应用程序,但它不适用于 SoundCloud 应用程序。我没有测试过任何其他人。</li>
</ol>

<hr/>

<h1>问题:</h1>

<p>有没有办法在第三方音乐应用(例如 iPod 应用)开始/停止播放时接收通知?或者,有没有办法在 <code>@property BOOL otherAudioPlaying</code> 的值发生变化时得到通知?</p>

<p>这种方法会适得其反吗?不简单地使用菜单项是愚蠢的吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在我的游戏中,ArunJTS 解决方案不起作用。第一个用户被问及麦克风。其次,它没有检测到音乐状态变化,例如,我的应用程序做了什么并开始播放,或者用户快速应用程序切换到音乐应用程序。</p>

<p>我的所作所为来源于官方<a href="https://developer.apple.com/library/ios/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/ConfiguringanAudioSession/ConfiguringanAudioSession.html#//apple_ref/doc/uid/TP40007875-CH2-SW10" rel="noreferrer noopener nofollow">app docs</a> .
段落:“在应用启动期间检查其他音频是否正在播放”。</p>

<p>我只是定期检查是否有其他应用在播放某些内容并做出适当的 react 。</p>

<p>我的解决方案:</p>

<pre><code>#pragma mark - Audio

- (void) startCheckingIfOtherAppIsPlayingAudio:(BOOL)shouldStart
{
    if (shouldStart == YES)
    {
      if (self.timerMusicCheck.isValid)
      {
            return;
      }

      //;
    }
    else
    {
      ;
      self.timerMusicCheck = nil;
    }
}

- (NSTimer*) timerMusicCheck
{
    if (_timerMusicCheck)
    {
      return _timerMusicCheck;
    }

    _timerMusicCheck = ;
    [ addTimer:_timerMusicCheck forMode:NSDefaultRunLoopMode];

    return _timerMusicCheck;
}

- (void) checkIsOtherAudioPlaying
{
    AVAudioSession *audioSession = ;
    if (!audioSession.otherAudioPlaying)
    {
      K_LOG(&#34;game audio resume&#34;);
      KMiscTools::resumeBackgroundMusic();
    }
    else
    {
      K_LOG(&#34;game audio suspend&#34;);
      KMiscTools::suspendBackgroundMusic();
    }
}
</code></pre>

<p>在 <code>- (void) applicationDidFinishLaunching:(UIApplication *)application</code> 我调用 <code>;</code> 就是这样。</p>

<p>所有这些都驻留在应用委托(delegate)实现文件中。</p>

<p>所以这就是我对你问题的回答。我没有发现任何关于weater Music 应用程序或其他应用程序开始做某事的通知。我已经阅读了整个 Audio Session 编程指南并查看了 AVPlayer、AVAudioSession 类引用,但没有发现这样的东西。如果有人知道更好更智能的解决方案,请告诉我。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 当另一个应用程序开始/停止播放音频时可以通知我的应用程序吗?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20113377/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20113377/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 当另一个应用程序开始/停止播放音频时可以通知我的应用程序吗?