Unity3D插件:调用Android原生方法工具类

之前做过很多有关安卓的对接,其中就需要调用Android原生的方法,或者接入的SDK需要调用Android原生的东西,每次都需要重新写一个类或者方法去处理这些,前一阵子我整理了一下,写了个工具类,专门用来处理Unity3D调用安卓原生情况,废话不多说,下面就把代码贴出来。

using System;
using UnityEngine;

namespace Tools.AndroidClass
{
    public static class AndroidClass
    {
        public static AndroidJavaObject JavaObject()
        {
            return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
        }

        public static void CallJavaMethed(string methedName, params object[] args)
        {
#if UNITY_ANDROID && !UNITY_EDITOR
        JavaObject().Call(methedName, args);
#else

#endif
        }

        public static T CallJavaMethed<T>(string methedName, params object[] args)
        {
#if UNITY_ANDROID && !UNITY_EDITOR
            return (T)Convert.ChangeType(JavaObject().Call<T>(methedName,args), typeof(T));
#else
            return (T)Convert.ChangeType(null, typeof(T));
#endif
        }
        public static void CallJavaStaticMethed(string methedName, params object[] args)
        {
#if UNITY_ANDROID && !UNITY_EDITOR
        JavaObject().CallStatic(methedName, args);
#else

#endif
        }

        public static T CallJavaStaticMethed<T>(string methedName, params object[] args)
        {
#if UNITY_ANDROID && !UNITY_EDITOR
            return (T)Convert.ChangeType(JavaObject().CallStatic<T>(methedName,args), typeof(T));
#else
            return (T)Convert.ChangeType(null, typeof(T));
#endif
        }
    }
}

首先,我们要引用命名空间using Tools.AndroidClass;然后调用CallJavaMethed方法,第一个参数是,java方法的方法名,后面和可传任意多个参数,也可以有返回值。下面是使用方法。

AndroidClass.CallJavaMethed("javaMethed", 1, true);//没有返回值的方法调用
int index1 = AndroidClass.CallJavaMethed<int>("javaMethed", 1, true);//有返回值的方法调用
AndroidClass.CallJavaStaticMethed("javaMethed", 1, true);//没有返回值的静态方法调用
int index2 = AndroidClass.CallJavaStaticMethed<int>("javaMethed", 1, true);//有返回值的静态方法调用

上面的工具类里用到了泛型,可以返回任意类型的值,这个工具类,是我整理了好久,才整理到这个程度的,希望能对大家有帮助,这个也算是我自己写个一个小插件了。

You May Also Like

About the Author: 大腿Plus

发表评论