如何检测其他应用是否正在播放音乐?
我正在制作一个游戏,并且我想检测在我的游戏运行时是否有其他人已经在播放音乐(或开始播放音乐)。如果是这样的话,我会淡出游戏中的音乐,继续播放音效。我正在使用 Unity 和 FMOD 进行音频播放。
据我所知,Android提供了两种不同的方法来做到这一点:AudioManager.isMusicActive和AudioManager.OnAudioFocusChangeListener。
AudioManager.isMusicActive
不适用于我的特定情况,因为 Unity/FMOD 寄存器本身的方式似乎会使这种情况始终返回 true。
AudioManager.OnAudioFocusChangeListener
让我检测另一个应用程序是否请求音频焦点,但无法检测我是否可以安全地再次请求它。
我不知道Unity / FMOD如何设置音频会话,但默认设置是播放声音,而不管在后台播放的任何其他内容。所以,如果我只知道是否有其他东西在玩,这将很容易!
有没有办法判断除了我自己的应用程序之外,是否有其他东西正在播放音乐?
注意:当我说音乐时,它也可能是有声读物,播客或最接近的等效物。
似乎有可能寻找任何正在进行的媒体播放通知,但这需要升级权限,这似乎对如此小的功能的要求太大了。
以下是一些解决方案的候选方案:
-
AudioFocusRequest.setAcceptsDelayedFocusGain 这可以在请求音频焦点时指定,但只是意味着我现在不需要焦点,以后也很好。但是,如果还有其他任何东西正在播放未“锁定”的音频,我将窃取音频焦点,停止该音频焦点,并在此过程中不向我提供进一步的信息。
-
AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK最初看起来很有希望,但是由于这取决于其他应用程序请求音频焦点以将自身指定为瞬态(即通知声音或类似声音),并且对我检测更长形式的外部音频播放没有任何好处。
-
BroadcastReceiver/MediaNotifications,这是Spotify的实现,但据我所知,这需要在我的应用程序中为我想要确认的每个玩家提供特定的支持,以及启用广播的用户。可能有效,但看起来很脆。