我为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
//...
答案 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");
这是直接在编辑器中输入的,未经过测试,因此您可能需要对其进行一些修改才能使其正常工作。