【转载】Unity 调用java代码 以及java回调

本文原始来自 https://blog.csdn.net/BDDNH/article/details/100583822

版权声明:本文为CSDN博主「笔端的年华」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
 

感谢大神的辛勤研究和分享。

================以下是原文=====================

Unity版本2018.2.17  , 直接支持java代码,所以我在使用的时候没有打包成aar。

基本都是固定的代码 

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");   //固定的,获取UnityPlayer类
        currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity");   //通过UnityPlayer类,获取Activity
 
 
        AndroidJavaClass launcher = new AndroidJavaClass("java类名(包名加类名)");      //获取java类
 
        AndroidJavaObject appController = launcher.CallStatic<AndroidJavaObject>("Instance"); //获取java类的实例 和unity单例一样,这是自己写的
 
      AndoridInterface callback = new AndoridInterface(callbackClass);
 
 
       appController.Call("Init", currentActivity, callback);  //初始化java类,把activity传进去,很多android方法调用都要用到,callback是一个回调,就是java调用Unity要用到的

AndoridInterface这个类主要就是java回调使用,必须继承AndroidJavaProxy,这是Unity写好的。构造函数中传入java代码

中对应的类名。这个类的函数和AndoridInterface的函数要一致,Unity会通过类名来回调。如果java要传参,函数的参数也要一致,java类用AndroidJavaObject代替。


 

public class AndoridInterface : AndroidJavaProxy {
    public Action<AndroidJavaObject> javaObjectCallBack;
 
    public Action<string> stringCallBack;
 
    public Action<int> intCallBack;
 
    public Action<float> floatCallBack;
 
    public Action<byte[]> byteCallBack;
 
    public Action<string> debugCallBack;
 
    public Action<bool> boolCallBack;
 
    public AndoridInterface(string interfaceName) : base(interfaceName)
    {
 
    }
 
    public void JavaObjectCallBack(AndroidJavaObject _data)
    {
        if (javaObjectCallBack != null)
            javaObjectCallBack(_data);
    }
 
    public void BoolCallBack(bool _data)
    {
        if (boolCallBack != null)
            boolCallBack(_data);
    }
 
    public void StringCallBack(string _data)
    {
        if (stringCallBack != null)
            stringCallBack(_data);
    }
 
    public void IntCallBack(int _data)
    {
        if (intCallBack != null)
            intCallBack(_data);
    }
 
    public void FloatCallBack(float _data)
    {
        if (floatCallBack != null)
            floatCallBack(_data);
    }
 
    public void ByteCallBack(byte[] _data)
    {
        if (byteCallBack != null)
            byteCallBack(_data);
    }
 
    public void DebugCallBack(string _data)
    {
        if (debugCallBack != null)
            debugCallBack(_data);
    }
}
 

这是java对应的回调接口,如果要在java中回调,就直接调用这个接口的函数就可以

public interface CallUnity {
    public  void JavaObjectCallBack(Object _data);
 
    public  void StringCallBack(String _data);
 
    public  void IntCallBack(int _data);
 
    public  void FloatCallBack(float _data);
 
    public  void FloatArryCallBack(float[] _data);
 
    public  void ByteCallBack(byte[] _data);
 
    public  void BoolCallBack(boolean _data);
 
    public void DebugCallBack(String _data);
}
 

这是java的Init函数

@Override
   public  void  Init(Context context , CallUnity callback)
   {

 

  }

 

整个代码因为自己封装了一下,所以感觉不太明了。

 java类.Call<返回类型>("函数名");    Unity如果调用java类就是这种格式

也可以   java类.CallStatic<返回类型>("函数名");  

返回类型byte[]的时候,我这里总是有问题,我看文档说是支持,但是我测试有问题。所以数组我全部用一个java类,类里面用一个集合来保存。Unity得到AndroidJavaObject,可以通过CallStatic遍历这个类的集合,然后取出数据。

整体来说调用挺简单,也挺方便的。
————————————————
================所以照例是要补点自己的废话。=================

最近需要unity调用jar,结果网上一搜,就是出来一堆jar aar manifest xml啥的 结果 整了半天没弄上。各种编译错误倒是和blog里的如出一辙。但是按照他们的方法都没能解决。后来一看到这篇文章, 我直接生成一个jar,丢plugins/android目录下,然后直接用blog主的代码,直接成功。我的天啊。。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值