之前做过很多有关安卓的对接,其中就需要调用Android原生的方法,或者接入的SDK需要调用Android原生的东西,每次都需要重新写一个类或者方法去处理这些,前一阵子我整理了一下,写了个工具类,专门用来处理Unity3D调用安卓原生情况,废话不多说,下面就把代码贴出来。文章源自大腿Plus-https://www.shijunzh.com/archives/216
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方法的方法名,后面和可传任意多个参数,也可以有返回值。下面是使用方法。文章源自大腿Plus-https://www.shijunzh.com/archives/216
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);//有返回值的静态方法调用
上面的工具类里用到了泛型,可以返回任意类型的值,这个工具类,是我整理了好久,才整理到这个程度的,希望能对大家有帮助,这个也算是我自己写个一个小插件了。文章源自大腿Plus-https://www.shijunzh.com/archives/216
评论