Unity Android平台 Java代码调用


获取当前Context

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

调用静态方法

示例调用com.package包名下name类的getInstance方法获取实例

AndroidJavaObject jo = new AndroidJavaObject("com.package.name");
AndroidJavaObject instance= jo.CallStatic<AndroidJavaObject>("getInstance");

调用非静态方法

示例调用com.package包名下name类的getInstance方法获取实例,通过实例调用非静态方法

AndroidJavaObject jo = new AndroidJavaObject("com.package.name");
AndroidJavaObject instance = jo.CallStatic<AndroidJavaObject>("getInstance");
instance .Call("SetWidth", MediapipeConfig);

创建java对象并赋值

示例创建com.package包名下name类对象,并给对象内静态变量和非静态变量赋值,方法参数传递时使用较多

AndroidJavaObject jo = new AndroidJavaObject("com.package.name");
jo.set<bool>("isBool",false);
jo.set<int>("count",false);
jo..SetStatic<float>("width",1.0f);

从对象中取出嵌套参数

下边是Java中自定义的一个常见返回类型

public class ImageData
{
    
    
	public int width;
	public int height;
	public byte[] bitmapData;
}

public class ReturnData
{
    
    
	public int count;
	public ImageData imageData;
}

public static void ReturnData GetReturnData
{
    
    
	...
	return returnData;
}

比如com.package包名下name类中,通过Call方法获取的返回值是C#中不存在的类,此时我们可能无法解析,但实际使用中我们并不关心这类具体是什么结构,想要的只是类中某个变量的值,这个时候可以使用Get方法取出其中的值。

AndroidJavaObject jo = new AndroidJavaObject("com.package.name");
AndroidJavaObject instance = jo.CallStatic<AndroidJavaObject>("GetReturnData");

//获取count
int count = instance.Get<int>("count");

//将类型转换为AndroidJavaObject,在从中取出想要的参数
AndroidJavaObject imageData = instance.Get<AndroidJavaObject>("imageData");
byte[] bitmapData = imageData.Get<byte[]>("bitmapData");
int width = imageData.Get<int>("width");
int height = imageData.Get<int>("height");

猜你喜欢

转载自blog.csdn.net/qq_27050589/article/details/129197215
今日推荐