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

server/2024/9/22 19:19:22/

前言 

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.5 获取属性

第一种 我们首先创建了一个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>。


http://www.ppmy.cn/server/22537.html

相关文章

采用前后端分离Vue,Ant-Design技术开发的(手麻系统成品源码)适用于三甲医院

开发环境 技术架构&#xff1a;前后端分离 开发语言&#xff1a;C#.net6.0 开发工具&#xff1a;vs2022,vscode 前端框架&#xff1a;Vue,Ant-Design 后端框架&#xff1a;百小僧开源框架 数 据 库&#xff1a;sqlserver2019 系统特性 麻zui、护理、PACU等围术期业务全覆…

MySql:连接和关闭

c connector 下面是一个示例&#xff0c;世界使用c connector时注意release版本和debug版本要和响应的动态库匹配才可以 #include <mysql_driver.h> #include <mysql_connection.h> #include <cppconn/resultset.h> #include <cppconn/statement.h>i…

05.JAVAEE之线程3

1.多线程的代码案例 1.1 单例模式【非常经典的设计模式】 单例 >单个实例(对象) 有些场景中,希望有的类,只能有一个对象,不能有多个!!!在这样的场景下,就可以使用单例模式了 EG:代码中,很多用于管理数据的对象就应该是"单例"的. MySQL JDBC DataSource(描述了 …

清除git缓存后,每次pull或者push都需要输入用户名密码

git bash进入你的项目目录&#xff0c;输入&#xff1a;git config --global credential.helper store 然后在文件下pull一下&#xff0c;输入一次用户名密码后&#xff0c;再次pull或者push就不需要输入了。 亲测有用哦

用Jenkins实现cherry-pick多个未入库的gerrit编译Android固件

背景: 在做Android固件开发的时候,通常我们可以利用gerrit-trigger插件,开发者提交一笔的时候自动触发jenkins编译,如果提交的这一笔的编译依赖其他gerrit才能编译过,我们可以在commit message中加入特殊字段,让jenkins在编译此笔patch的时候同时抓取依赖的gerrit代码下…

深入浅出MySQL-06-【索引的设计和使用】

文章目录 前言1.索引概述2.设计索引的原则3.索引设计的误区4.索引设计的一般步骤5.BTREE索引和HASH索引6.索引在MySQL 8.0中的改进6.1.不可见索引6.2.倒序索引 7.总结 前言 环境&#xff1a; Windows11MySQL-8.0.35 1.索引概述 所有MySQL列类型都可以被索引&#xff0c;对相…

【鸿蒙应用】理财App

目录 第一节项目讲解项目介绍 第二节&#xff1a;项目创建登录静态框架编写登录页面设稿新建项目控制台添加项目Login页面封装标题组件 第三节&#xff1a;登录页静态表单编写第四节—内容页架构分析底部栏组件第五节—底部栏组件切换第六节&#xff1a;首页静态页编写第七节&a…

搜索引擎的发展历史

搜索引擎的发展历史可以追溯到20世纪90年代初&#xff0c;随着互联网的快速发展和信息量的急剧增加&#xff0c;人们开始感受到了获取和管理信息的挑战。以下是搜索引擎发展的主要阶段和关键事件&#xff1a; 早期搜索引擎&#xff08;1990s&#xff09;&#xff1a; 1990年&am…