检测用户是否正在从另一个应用程序播放音乐 [英] Detecting if user is playing music from another app

查看:23
本文介绍了检测用户是否正在从另一个应用程序播放音乐的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的游戏有游戏内配乐,如果用户正在通过 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆