Unity调用Android

1.Unity调用Android

根据unity用户手册,unity可以采用native code(c/c++),但是也提供了C#调用方法,本文对此进行简单讲解。

2.Unity获取android类

通过下述方法即可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity。继而可以调用MainActivity的静态方法getIntentResult。其返回值为string,如果无返回值,则直接调用CallStatic即可。

using (AndroidJavaClass mainActivityClass = new AndroidJavaClass("com.ii.intentreceiver.MainActivity"))
        {
            Debug.Log("IntentReceiver start catch infomation");
            try
            {
                result = mainActivityClass.CallStatic<string>("getIntentResult");
            }
            catch(Exception ex)
            {
                Debug.Log("IntentReceiver get result failed:" + ex.Message);
            }
        }

3.Unity获取android类的实例

通过下述方法即可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity的一个实例。继而可以调用MainActivity的方法getResult。其返回值为Android定义的一个实例,所以返回值为AndroidJavaObject类型,如果无返回值,则直接调用Call即可。

        try
        {
            using (AndroidJavaObject main = new AndroidJavaObject("com.ii.intentreceiver.MainActivity",null))
            {
                intentJavaObject = main.Get<AndroidJavaObject>("getResult");
            }
        }
        catch(AndroidJavaException ex)
        {
            Debug.Log("Exception while connecting to the Activity:" + ex.ToString());
            return null;
        }

3.获取Unity的Activity

即可获取unity的currentActivity

    private static string unityPlayerClass = "com.unity3d.player.UnityPlayer";
    public static AndroidJavaObject GetActivity()
    {
        AndroidJavaClass jc = new AndroidJavaClass(unityPlayerClass);
        if (jc == null)
        {
            Debug.LogErrorFormat("Failed to get Unity Player class, {0}", unityPlayerClass);
            return null;
        }
        AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
        if (activity == null)
        {
            Debug.LogError("Failed to obtain Android Activity from Unity Player class.");
            return null;
        }
        return activity;
    }

4.Unity获取Android回调结果

4.1 Android定义的接口

此处Android端通过接口来实现的回调

package com.ii.Manager;

public class PluginCallback {
    public interface ResultCallback {
        public void OnSuccess(String result, String hint);
        public void OnError(String result, int errorCode);
    }
}

Android层方法:

package com.ii.Manager;
public class Method { 
    public void Execute(PluginCallback.ResultCallback callback){。。。}
    }

4.2 Unity定义相应的类

接受回调的类:
此类要继承AndroidJavaProxy,同时根据原Android中的接口定义两个同名的方法。

            public delegate void SuccessHandler(string result, string hint);
            public delegate void ErrorHandler(string result, int errorCode);
            class ExecuteCallback : AndroidJavaProxy
            {
                SuccessHandler successHandler;
                ErrorHandler errorHandler;
                public InstallApkCallback(SuccessHandler successCallback,
                                          ErrorHandler errorCallback)
                                        : base("com.ii.Manager.PluginCallback$ResultCallback")
                {
                    successHandler = successCallback;
                    errorHandler = errorCallback;
                }

                public void OnSuccess(string result, string hint)
                {
                    if (successHandler != null)
                        successHandler(result, hint);
                }

                public void OnError(string result, int errorCode)
                {
                    if (errorHandler != null)
                        errorHandler(result, errorCode);
                }
            }

4.3 Unity使用方法

在new ExecuteCallback(null,null)处填入回调方法。

AndroidJavaObject jo = new AndroidJavaObject("package com.ii.Manager.Method");
jo.Call("Execute",new ExecuteCallback(null,null));
原文地址:https://www.cnblogs.com/llstart-new0201/p/11782725.html