C# 调用 Java 方法,获取 Java 字段 这个就比较简单,C# 调用 Java 的底层原理是使用JNI调用,Unity已经提供了很方便的接口:
1.创建对象:C#中使用 AndroidJavaObject 类封装 Java 对象,new 一个 AndroidJavaObject 对象相当于调用对应的 Java 对象的构造函数。借助 C# 可变参数列表,可以给 Java 对象的构造函数传递任意数量的参数。
/ /第一个参数是 Java 类的完整包名,剩下的其他参数会传递给构造方法。 AndroidJavaObject jo = new AndroidJavaObject("java.lang.String", "some_string");比较android调用untiy那样的麻烦这个获取java代码就方便多了,android调用untiy可以封装一遍(理论可以按照自己想法封装,最后我试试在补漏片章中给出) 上面这个方法是找到一个 java对象并且实例化一下对象这也就是在java中是一个完整的对象了
2.调用对象方法:使用 AndroidJavaObject 类的 Call 方法,有泛型与非泛型的两个版本。
// 泛型版本,目的是指定返回值的类型 int int= jo.Call<int>("java中方法名称"); // 非泛型版本,处理返回值是void的情况。 jo.Call("java中方法名称"); // 不包含返回值得调用3.获取类,主要用于获取静态字段或调用静态方法,常用来获取 UnityPlayer
// 传入类的完整包名 这个官方获取获取到就是一个类文件java的 ,需要注意一下必须填写完整路径 AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//必须填写完整路径 类的4.获取静态字段,只有泛型版本,因为不会有void类型的字段。。。 设置字段、获取对象字段、调用静态方法的代码类似,略。
//jc = 上面 3中获取的java类文件对象 currentActivity = 需要获取他们当中的静态变量或者是常量 **java 类中==名称** //这个获取到可能为空或者null 使用前需要判断后使用 AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");参考了文章