一、调用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";

///

/// 调用无参数、无返回值Android方法

///

publicvoid AndroidFuncTest1()

{

try

{

using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))

{

cls.Call("androidFuncTest1");

}

}

catch (Exception e)

{

Debug.LogException(e);

}

}

///

/// 调用有参数、无返回值Android方法

///

public void AndroidFuncTest2()

{

try

{

using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))

{

cls.Call("androidFuncTest2", "测试参数");

}

}

catch (Exception e)

{

Debug.LogException(e);

}

}

///

/// 调用无参数、有返回值Android方法

///

public void AndroidFuncTest3()

{

bool result = null;

try

{

using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))

{

result = cls.Call("androidFuncTest3");

}

}

catch (Exception e)

{

Debug.LogException(e);

}

}

///

/// 调用有参数、有返回值Android方法

///

public void AndroidFuncTest4()

{

bool result = null;

try

{

using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))

{

result = cls.Call("androidFuncTest4", "测试参数");

}

}

catch (Exception e)

{

Debug.LogException(e);

}

}

// 还可以使用以下方法,要求调用的android方法,必须写在UnityActivity下,比如继承了UnityActivity,否则调用不到

///

/// 调用有参数、有返回值Android方法

///

public void AndroidFuncTest4()

{

bool result = null;

try

{

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

AndroidJavaObject jo = jc.GetStatic("currentActivity");

result = jo.Call("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";

///

/// 调用有参数、有返回值Android方法

///

public void AndroidFuncTest4()

{

bool result = null;

try

{

using (AndroidJavaObject cls = new AndroidJavaObject(CLASS_NAME))

{

result = cls.CallStatic("androidFuncTest4", "测试参数");

}

}

catch (Exception e)

{

Debug.LogException(e);

}

}

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

// 类名(包名+类名)

private static readonly string CLASS_NAME = "com.android.util.UseForUnity";

///

/// 调用有参数、有返回值Android方法

///

public static void AndroidFuncTest4()

{

bool result = null;

try

{

AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");

result = jc .CallStatic("androidFuncTest4", "测试参数");

}

catch (Exception e)

{

Debug.LogException(e);

}

}

// 还可以使用下面方法,要求调用的android方法,必须写在UnityActivity下,不然调用不到

///

/// 调用有参数、有返回值Android方法

///

public static void AndroidFuncTest4()

{

bool result = null;

try

{

AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");

AndroidJavaObject jo = jc.GetStatic("currentActivity");

result = jo.CallStatic("androidFuncTest4", "测试参数");

}

catch (Exception e)

{

Debug.LogException(e);

}

}

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐