Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用任何方法
16lz
2021-01-23
Unity3d和Android可以直接用c#编写代码调用 ; 今天实现了在Unity3d 中完全用c#调用android java 实现call 对话框的功能;
示例代码如下(可以直接使用):
using UnityEngine;using System.Collections;using System;public class AndroidProxyExample : MonoBehaviour { private static int dialogCb = 123; class CycClickListener : AndroidJavaProxy { public CycClickListener() : base("android.content.DialogInterface$OnClickListener") { } void onClick(AndroidJavaObject dialogInterface, int arg1) { Debug.Log("ClickListener ---- arg1:"+arg1); dialogCb = arg1; } }void OnGUI (){if (GUI.Button(new Rect (15, 15, 450, 75), "cd:"+dialogCb.ToString())){AndroidJavaObject activity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity"); activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>{ AndroidJavaObject builder = new AndroidJavaObject("android.app.AlertDialog$Builder", activity); builder.Call("setTitle", "cyc title"); builder.Call("setMessage", "cyc this is test dialog msg"); builder.Call("setPositiveButton", "sure:)", new CycClickListener()); AndroidJavaObject dialog = builder.Call("create"); dialog.Call("show");}));}}
运行结果:
有这几个东西,就可以调用实现Android中的任何方法,创建任何类,实现任何功能了。可以丢弃UnityPlayer.UnitySendMessage(GameObject, functionName,params);方法向Unity端发送message了。
需要注意的几个东西: 1.Android的命名规则,函数名都是首字母小写的;onClick(),不是OnClick()方法 2.对于interface,返回的interface只是实现了interface方法的Class, 所以,用AndroidJavaObject接收返回的interface实例 3.在Unity中,所有调用Android UI相关的东西,都要通过activity.runOnUiThead,在UI线程中调用 4.Unity中,实现Android接口,继承AndroidJavaProxy方法,构造方法要实现继承的java接口;其中,java中的接口,直接在继承的类中写(因为AndroidJavaProxy用Invoke的方式调用方法,类似于反射,只需要知道方法名和参数就可以了,并不需要知道这个方法是不是override的) 5.如果调用的方法在logcat中报错,可以查看报错内容,其中需要调用的名称或者接口方法,需要的返回类型都会在错误中: 找不到CycClickListner.onClick(AndroidJavaObject,Int32)方法,其中标明了需要的方法是onClick,方法需要的参数类型分别为AndroidJavaObjec和Int32
原文链接:http://blog.csdn.net/yanchezuo/article/details/52261944
更多相关文章
- Android例子—设置Activity全屏的三种方法
- Android stuio在MainActivity中运行java的main方法
- android中的提示信息显示方法(toast应用)
- adb devices 找不到设备的解决方法
- android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用
- android获取各种系统路径的方法
- android 应用如何获取系统权限 以及root系统方法
- Android 和 JS 交互时调用不成功解决方法
- android应用程序最小化的处理方法