检测用户是否正在从另一个应用程序播放音乐 [英] Detecting if user is playing music from another app
问题描述
我的游戏有游戏内配乐,如果用户正在通过 Android 或 iOS 上的媒体应用播放自己的音乐,我想暂停音乐.
My game has an in-game soundtrack and I would like to pause the music if the user is playing music of their own from a media app on Android or iOS.
有没有一种方法可以高效地在 update() 函数中运行?
Is there a way to do this that is efficient enough to run in an update() function?
提前致谢!
推荐答案
您可以检查音乐是否按照this 帖子.
You can check if music is playing as described from this post.
AudioManager manager = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);
if(manager.isMusicActive())
{
// do something - or do it not
}
将它用 Java 包裹起来,然后在 AndroidJavaClass
API 的帮助下从 C# 调用它.
Wrap it around a class in Java then call it from C# with the help of the AndroidJavaClass
API.
但这需要Java.您可以使用该代码并将其转换为 C#,而无需 Java.获取 UnityPlayerPlayer、Activity 和 Context.其余的可以由 AndroidJavaClass
处理.
But that requires Java. You can take that code and convert it to C# without Java at-all. Get UnityPlayerPlayer, Activity then the Context. The rest can be handled by AndroidJavaClass
.
这是不需要 Java 插件的移植 C# 版本.
Here is the ported C# version that does not require Java plugin.
bool isMusicPlaying()
{
const string AUDIO_SERVICE = "audio";
AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");
bool mIsPlaying;
using (AndroidJavaObject audioManager = unityContext.Call<AndroidJavaObject>("getSystemService", AUDIO_SERVICE))
{
mIsPlaying = audioManager.Call<bool>("isMusicActive");
}
return mIsPlaying;
}
这篇关于检测用户是否正在从另一个应用程序播放音乐的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!