从Unity 3d获取applicationContext [英] Get applicationContext from Unity 3d

查看:220
本文介绍了从Unity 3d获取applicationContext的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为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屋!

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