Unity C#和安卓原生专题一 C#和Android Java交互

发布于:2024-05-02 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言 

C#和iOS Obj-C交互的方法,和Android交互也一样简单,主要是Unity提供了非常方便的辅助类,基本不需要和JNI打交道

一 、 C#中关于Android的几个基本概念

1.1 创建或获取类

第一种 new AndroidJavaClass()来创建

AndroidJavaClass jc = new AndroidJavaClass("com.example.mygame.MyActivity");

1.2 创建或获取JAVA对象

 第一种 我们首先创建了一个AndroidJavaClass对象,并指定了Java类的完全限定名。然后我们调用了这个Java类的getInstance静态方法,并将返回的对象存储在AndroidJavaObject

AndroidJavaClass jc = new AndroidJavaClass("com.example.mygame.MyActivity");
AndroidJavaObject jo = jc.Call<AndroidJavaObject>("getInstance");

第二种 我们首先创建了一个AndroidJavaClass对象,并指定了UnityPlayer类的完全限定名。然后我们使用GetStatic<AndroidJavaObject>获取了currentActivity静态字段。最后我们调用了MyJavaMethod方法,并传入了两个参数

AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("MyJavaMethod", param1, param2);

第三种 使用AndroidJavaObject 调用 Call<AndroidJavaObject>();

public static AndroidJavaObject CallReturnObj(AndroidJavaObject obj, string name, object p1) {
            return obj.Call<AndroidJavaObject>(name, p1);
        }

1.3 获取属性

第一种 我们首先创建了一个AndroidJavaClass对象,并指定了Java类的完全限定名。然后我们使用GetStatic<int>获取了MY_STATIC_FIELD静态字段的值,并将这个值存储在int类型的变量中

AndroidJavaClass jc = new AndroidJavaClass("com.example.mygame.MyActivity");
int value = jc.GetStatic<int>("MY_STATIC_FIELD");

二 C#调用java方法


使用 AndroidJavaClass和 AndroidJavaObject可以很方便的调用java方法。最常用的是AndroidJavaObject的Call方法;

官方文档:http://docs.unity3d.com/ScriptReference/AndroidJavaObject.html
这个Call是支持多参数的,第一个参数必须是方法名,第二个开始则是各种参数。如果有返回值则需要使用泛型版本Call<Type>。

2.1 


网站公告

今日签到

点亮在社区的每一天
去签到