Unity 中调用java代码基本没什么问题,java通过AndroidJavaProxy回调Unity时,数据只能支持string,int,float,bool,AndroidJavaObject。AndroidJavaObject类似一个object,可以通过这个类,去调用类中的数据,所以任何数据都可以传输。
public override void JavaObjectCallBack(AndroidJavaObject _data)
{
int count = _data.Call<int>("size");
for (int i = 0; i < count; i++)
{
AndroidJavaObject appobj = _data.Call<AndroidJavaObject>("get", i);
AppData _app = new AppData();
_app.appname = appobj.Get<string>("appname");
_app.imageData = appobj.Get<byte[]>("imageData");
_app.packageName = appobj.Get<string>("packageName");
_app.activityName = appobj.Get<string>("activityName");
_app.width = appobj.Get<int>("width");
_app.height = appobj.Get<int>("height");
Debug.Log(_app.packageName);
refreshApp.Add(_app);
}
}
但是使用java监听安卓事件的时候需要注意,例如监听程序卸载,安装之类的。直接回调Unity可能会和Unity本身的生命周期冲突,类似于多线程。因为java代码的监听,是开启了一个单独线程的。因为需要在Update里面更新数据的,和网络的多线程类似。