Unity Android交互详解
我们在Unity项目的开发中很经常会需要在Unity中使用Android相关的功能,那如何才能
正常的相互之间的进行调用呢?且看下文
1.Unity调用Android
1、普通类静态方法的调用,使用AndroidJavaClass
//创建类的引用
AndroidJavaClass ajc = new AndroidJavaClass("需要调用的方法所在的类");
//使用创建的类进行调用
ajc.CallStatic("方法名", {参数数组});
//如果调用的方法包含返回值
ajc.CallStatic<返回值的类型>("方法名", {参数数组})
2、普通类的实例方法调用,使用AndroidJavaObject
//创建类的对象
AndroidJavaObject ajo = new AndroidJavaObject("类全名");
//调用方法类似于静态方法 但有所不同
ajo.Call("方法名",{参数数组});
//带返回值
ajo.Call<返回的类型>("方法名",{参数数组})
上边的这两个在大多数情况下已经可以满足我们基础的使用,但是有一些情况下,比如说 给定的一个方法所需要的参数类型并不是C#中已经有的类型。在这种情况下我们应该怎么 调用呢?举个栗子,在我们登录微信的时候我们需要获得微信sdk的回调,微信的接口已 经固定好了,你需要传一个实现了ILoginCallBack接口的类,在这种情况下,我们没有办法 直接在Adnroid中创建这个类,那怎么办呢?Unity为我们提供了一个叫做 AndroidJavaProxy的类,我们可以通过继承这个类然后重新写其构造函数并将传入ILoginCallBack的完整路径,并在这个类中实现ILoginCallBack的方法即可。
public class WeLoginAndroidAdapter : AndroidJavaProxy, ILoginCallBack
{
public WeLoginAndroidAdapter() : base(WeShareDefine.ModooShareCallbackInteface)
{
}
public event Action<string> OnLoginSuccess;
public event Action<string> OnLoginCancle;
public event Action<string> OnLoginFailed;
public void loginSuccess(string info)
{
if (OnLoginSuccess != null)
{
OnLoginSuccess.Invoke(info);
}
}
public void loginCancel(string result)
{
if (OnLoginCancle != null)
{
OnLoginCancle.Invoke(result);
}
}
public void loginFailed(string result)
{
if (OnLoginFailed != null)
{
OnLoginFailed.Invoke(result);
}
}
}
这个时候我们可以实例化出来一个WeLoginAndroidAdapter的实例对象作为方法的参数传入调用,当登录的一些会回调调用的时候 ,就可以直接调用我们创建这个类实现的方法。当然实现的方法的名必须保持一致。
这个时候你可能会想到,如果说我需要传入的那个类型是一个正常的类呢?别急,回想一下,我们之前在调用的Unity的实例方法的时候,可是有创建过AndroidJavaObject,这个时候我们同样可以创建一个类的对象,然后作为参数传入,但这种情况并不常见。代码就不贴了,有兴趣的可以自己尝试一下调用。
再等等,有时候我们需要传入并不是一个类型,而是一个枚举,这种情况下要怎么办?其实是一样的,在Unity中,Android不管是类还是枚举,我们都可以通过使用AndroidJavaClass和AndroidJavaObject来使用。比如说,java中有这样一个枚举 LoginPlatform
package com.test.login
public enum LoginPlatform{
WeChat,
QQ,
Weibo;
}
这个时候呢,我们可以在Unity中,用AndroidJavaClass来创建出这个枚举的引用。
AndroidJavaClass ajc = new AndroidJavaClass("com.test.login.LoginPlatform")
AndroidJavaObject loginP = ajc.CallStatic<AndroidJavaObject>("WeChat")
上边就是我们应该如何使用Unity来创建java代码中的枚举。
未完待续