检查Android设备是否静音

时间:2016-12-09 15:59:59

标签: java c# unity3d

我为Android应用创建了简单的插件。但由于一些奇怪的原因,调用我的函数的结果总是" false"。我的插件应通知应用程序有关电话是否静音。这是我的插件的代码:

import android.app.Fragment;
import android.content.Context;
import android.media.AudioManager;

public class AndroidMuteCtrl extends Fragment  {

    public static String debugThis()
    {
        return "Test message from AndroidMuteCtrl plugin.";
    }

    public boolean isMuted()
    {
        AudioManager audio = (AudioManager) this.getActivity().getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
        if (audio.getRingerMode() ==  AudioManager.RINGER_MODE_NORMAL) return false;
        else  return  true;
    }

}

我的c#代码:

//...
AndroidJavaClass pluginClass = new AndroidJavaClass("com.overly.mutecontrol.AndroidMuteCtrl");
//...
bool isMuted = pluginClass.Call<bool>("isMuted"); // ALWAYS FALSE
//...

1 个答案:

答案 0 :(得分:1)

这是因为AudioManager需要引用Activity或Context才能工作。

该行:

(AudioManager) this.getActivity()
因为没有,所以应该悲惨地失败。您需要将当前的Activity或Context从Unity插件发送到静态函数,然后您可以调用它。

此外,在此处扩展Fragment完全没用。

This是如何将Context发送到java插件,this是如何将Activity发送到java插件。

在这种情况下,我会将Context发送到插件。

<强>爪哇:

public final class AndroidMuteCtrl{

    static Context myContext;
    // Called From C# to get the Context Instance
    public static void receiveContextInstance(Context tempContext) {
        myContext = tempContext;
    }

    public static String debugThis()
    {
        return "Test message from AndroidMuteCtrl plugin.";
    }

    public static boolean isMuted()
    {
        AudioManager audio = myContext.getSystemService(Context.AUDIO_SERVICE);
        if (audio.getRingerMode() ==  AudioManager.RINGER_MODE_NORMAL) return false;
        else  return  true;
    }
}

<强> C#:

AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject unityContext = unityActivity.Call<AndroidJavaObject>("getApplicationContext");

AndroidJavaClass pluginClass = new AndroidJavaClass("com.overly.mutecontrol.AndroidMuteCtrl");
//Send the Context
pluginClass.CallStatic("receiveContextInstance", unityContext);
bool isMuted = pluginClass.CallStatic<bool>("isMuted"); 

这是直接在编辑器中输入的,未经过测试,因此您可能需要对其进行一些修改才能使其正常工作。