Unity的AndroidJavaProxy的使用
参考链接:
https://docs.unity3d.com/ScriptReference/AndroidJavaProxy.html
https://www.jianshu.com/p/ceaac83808f2
使用环境:
Unity调用jar中java方法并且使用C#侧的回调函数:
一般用于在java中定义接口(interface),作为某项操作的回调,然后再unity中用c#实现这个接口,然后把实现类的对象传给java,使操作后的回调执行C#中的逻辑。
AndroidJavaProxy类可用于实现任何java接口(interface)。任何匹配代理对象上接口的java vm方法调用都将自动传递给c#实现。
首先,在Java代码中定义接口,示例代码如下:
public interface javaSDKCallbackListener
{
void OnSDKInited(String msg);
void OnLogined(String token);
void OnLoginOut();
}
其次,在Unity 工程C#代码中,实现该接口。
注意:Unity C#代码实现Android Java 代码必须要完全一致,但是允许在UnityC#代码中实现多次。
class SDKCallbackListener : AndroidJavaProxy
{
// 这句话很重要!!!C#找到Jar中接口的引用
public SDKCallbackListener() : base("com.eam.qqlogin.SDKCallbackListener") { }
//实现接口中的方法
public void OnSDKInited(string msg)
{
Debug.Log( "OnSDKInited:" + msg);
}
public void OnLogined(string token)
{
Debug.Log("OnLogined:" + token);
}
public void OnLoginOut()
{
Debug.Log("OnLoginOut.);
}
}
然后,在C#中new一个SDKCallbackListener,并把new好的值传到Java代码。
var mCallbackListener = new SDKCallbackListener();
// 调用Jar中的方法,并把new的值传进去
mSDKJavaObject.Call("initSDK", mCallbackListener);
在Java中封好给C#调用及传递回调的方法。
private javaSDKCallbackListener mCallbackListener;
public void initSDK(javaSDKCallbackListener listener)
{
mCallbackListener = listener;
mCallbackListener.OnSDKInited("qq sdk initSDK ok");
}