参考链接: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);
}
}
网友评论