美文网首页
Unity中调用Android jar包或arr包方法

Unity中调用Android jar包或arr包方法

作者: 洒一地阳光_217d | 来源:发表于2020-08-16 11:44 被阅读0次

参考链接:Android Studio打包arr包并导入Unity中

一、调用Android,非静态方法:

Android非静态java方法:

package com.android.util;

public class UseForUnity {
    // 无参数、无返回值
    public void androidFuncTest1() {

    }

    // 有参数、无返回值
    public void androidFuncTest2(String arg) {

    }

    // 无参数、有返回值
    public boolean androidFuncTest3() {

    }

    // 有参数、有返回值
    public boolean androidFuncTest4(String arg) {

    }
}

Unity中调用,通过对象调用(AndroidJavaObject):

    // 类名 (包名+类名)
    private static readonly string CLASS_NAME = "com.android.util.UseForUnity";

    /// <summary>
    /// 调用无参数、无返回值Android方法
    /// </summary>
    publicvoid AndroidFuncTest1()
    {
        try
        {
            using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))
            {
                cls.Call("androidFuncTest1");
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

    /// <summary>
    /// 调用有参数、无返回值Android方法
    /// </summary>
    public void AndroidFuncTest2()
    {
        try
        {
            using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))
            {
                cls.Call("androidFuncTest2", "测试参数");
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

    /// <summary>
    /// 调用无参数、有返回值Android方法
    /// </summary>
    public void AndroidFuncTest3()
    {
        bool result = null;
        try
        {
            using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))
            {
               result = cls.Call<bool>("androidFuncTest3");
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

    /// <summary>
    /// 调用有参数、有返回值Android方法
    /// </summary>
    public void AndroidFuncTest4()
    {
        bool result = null;
        try
        {
            using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))
            {
               result = cls.Call<bool>("androidFuncTest4", "测试参数");
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

    // 还可以使用以下方法,要求调用的android方法,必须写在UnityActivity下,比如继承了UnityActivity,否则调用不到
     /// <summary>
    /// 调用有参数、有返回值Android方法
    /// </summary>
    public void AndroidFuncTest4()
    {
        bool result = null;
        try
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
            result = jo.Call<bool>("androidFuncTest4", "测试参数");
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }
二、调用Android,静态方法:

Android静态java方法:

package com.android.util;

public class UseForUnity {
    // 有参数、有返回值
    public static bool androidFuncTest4(String arg) {

    }
}

Unity调用:
方法一,通过对象调用(AndroidJavaObject):

    // 类名(包名+类名)
    private static readonly string CLASS_NAME = "com.android.util.UseForUnity";

    /// <summary>
    /// 调用有参数、有返回值Android方法
    /// </summary>
    public void AndroidFuncTest4()
    {
        bool result = null;
        try
        {
            using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))
            {
               result = cls.CallStatic<bool>("androidFuncTest4", "测试参数");
            }
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

方法二、通过类调用(AndroidJavaClass ):

    // 类名(包名+类名)
    private static readonly string CLASS_NAME = "com.android.util.UseForUnity";
    /// <summary>
    /// 调用有参数、有返回值Android方法
    /// </summary>
    public static void AndroidFuncTest4()
    {
        bool result = null;
        try
        {
             AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
             result = jc .CallStatic<bool>("androidFuncTest4", "测试参数");
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

    // 还可以使用下面方法,要求调用的android方法,必须写在UnityActivity下,不然调用不到
    /// <summary>
    /// 调用有参数、有返回值Android方法
    /// </summary>
    public static void AndroidFuncTest4()
    {
        bool result = null;
        try
        {
             AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
             AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
             result = jo.CallStatic<bool>("androidFuncTest4", "测试参数");
        }
        catch (Exception e)
        {
            Debug.LogException(e);
        }
    }

相关文章

网友评论

      本文标题:Unity中调用Android jar包或arr包方法

      本文链接:https://www.haomeiwen.com/subject/naltjktx.html