Unity调用Android

一、关于AndroidJavaClass和AndroidJavaObject

1、AndroidJavaClass是获取到一个具体的类。例如:AndroidJavaClass jc = new AndroidJavaClass(com.abc.b.a); com.abc.b是包名,a是具体的Java类。然后jc就可以调用a类中的静态函数了,类似于C#之中的调用静态函数的方式。当然,也可以获取静态变量。

这个时候,要想获取实例来调用非静态函数,则可以在Java类中写一个单例函数,然后使用下面类似代码获取。AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("GetInstance"); 然后用jo来调用实例方法(也就是非静态函数)。

2、AndroidJavaObject是直接构造一个Java类的实例对象,new AndroidJavaObject(参数1,参数2)   参数1是要实例化的对象,包名+Java类(字符串类型,例如:com.unity3d.player.a)。参数2是Java类的构造函数的参数。然后就可以用jo来调用非静态函数了。

当然,Java中的内部类也可以用这种方式取得。例如 AndroidJavaObject jo = new AndroidJavaObject("java.lang.String");  AndroidJavaObject jo = new AndroidJavaObject("java.util.HashMap");等等

3、Unity调用Java类中的函数时,关于传参的问题。

  如果想要传入System.String,那么直接传入String参数即可。System.String指的是C#的类型,在Java中的函数中的参数中的参数类型为String。

  如果想要传入System.Double,那么直接传入Double参数即可。System.Double指的是C#的类型,在Java中的函数中的参数中的参数类型为double。注意:Java中参数类型是开头字母小写的double,而不是开头字母大写的Double(java.lang.Double类)

  如果想要传入Dictionary,那么需要注意键值对的参数类型,可以创建一个Java类,这个Java类包含了HashMap变量和对HashMap变量进行操作的函数,然后再由Unity调用这些函数,将Dictionary中的内容传入这个Java类中的HashMap。如下所示:

  

package com.unity3d.player;
import java.util.HashMap;
public class CustomEventDictionary {

  public HashMap<String,Object> hashMap;


  public CustomEventDictionary()
  {
    hashMap = new HashMap<String,Object>();
  }

  public HashMap<String,Object> GetHashMap()
  {
    return hashMap;
  }

  public void put(String key, Object value)
  {
    hashMap.put(key,value);
  }

  public void put(String key,String value)
  {
    hashMap.put(key,value);
  }

  public void put(String key,double value)
  {
    hashMap.put(key,value);
  }

}

posted on   _依靠  阅读(1203)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示