Unity Android交互详解

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不管是类还是枚举,我们都可以通过使用AndroidJavaClassAndroidJavaObject来使用。比如说,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代码中的枚举。

未完待续

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值