从Unity 3d获取applicationContext [英] Get applicationContext from Unity 3d
问题描述
我正在为unity 3d编写一个android插件,我的问题是初始化,我需要将applicationContext传递给方法.
所以我的MyPlugin.cs
如下所示
I am writing an android plugin for unity 3d, my problem is for initialize I need to pass applicationContext to a method.
So my MyPlugin.cs
is like below
using UnityEngine;
using System.Collections;
public class MyPlugin : MonoBehaviour {
void Awake () {
Debug.Log ("awake");
Initialize ();
}
public static void Initialize()
{
AndroidJavaClass playerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = playerClass.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaClass pluginClass = new AndroidJavaClass("com.mycompany.product.UnityPlugin");
pluginClass.CallStatic("initialize", new object[1] {activity});
}
}
并且在我拥有的android UnityPlugin.java
类中
and in android UnityPlugin.java
class I have
public class UnityPlugin extends Plugin {
static public void initialize (Activity unityActivity){
try {
MyApp.initialize(unityActivity.getApplicationContext());
} catch (NullPointerException e){
Log.d("unity", "null pointer exception");
}
}
}
,我一直都得到NullPointerException
.从团结活动中获得AppilcationContext
的正确方法是什么?
and I get NullPointerException
all the times. what is the correct way to get AppilcationContext
from unity activities?
推荐答案
首先,检查pluginClass是否为空
First, check if pluginClass is null
if(pluginClass == null) Debug.Log("plugin class is null");
如果确定您要使用正确的字符串参数创建新的AndroidJavaClass.
If it's make sure you're creating new AndroidJavaClass with proper string argument.
接下来,我不确定为什么要传递一个Activity数组而不是仅传递Unity上下文.尝试这样的事情:
Next, I'm not sure why you're passing array of one Activity instead of passing just Unity's context. Try something like this:
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
pluginClass.CallStatic("initialize", context);
您还需要以以下方式更改插件端:
You'll also need to change plugins side in following manner:
public class UnityPlugin extends Plugin {
static public void initialize (Context unityContext){
try {
MyApp.initialize(unityContext);
} catch (NullPointerException e){
Log.d("UnityPlugin", "Null PTR Exception");
e.printStackTrace();
}
}
}
这篇关于从Unity 3d获取applicationContext的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!