Unity 端可以使用 AndroidJavaClass, AndroidJavaObject 和 AndroidJavaProxy 这三个类,通过 JNI 对应了 Java 中的类,对象和接口与Android 平台进行通信。
Android 平台则通过调用 UnitySendMessage 方法来向 Unity 传递信息,Unity 端根据传递来的信息执行对应的逻辑。但是void UnitySendMessage(“GameObjectName”, “MethodName”, “Message”)需要在 Unity 端有一个 GameObject 来接收信息,而且没有返回值,只能传递一个字符串参数。这种方式是托管交互。
下面介绍一个非托管交互方法,通过回调的方式实现android 和c#交互:
Android 端 有一个 setListener方法,参数是一个 GmInitListener的回调:
package com.xxx.xxx.a;
public class GmUnity {
private static final String TAG = "GmUnity";
public static void setListener(Activity activity, final GmInitListener initCallback){
GmResult gmResult = new GmResult(0,"Init Success");
if (initCallback != null)
initCallback.onResult(gmResult);
}
}
package com.xxx.xxx.listener;
public interface GmInitListener {
void onResult(GmResult result);
}
package com.xxx.xxx.b;
public class GmResult {
private int code;
private String message;