Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用任何方法
2016-08-20 16:16
941 查看
Unity3d和Android可以直接用c#编写代码调用;
今天实现了在Unity3d 中完全用c#调用android java 实现call 对话框的功能;
示例代码如下(可以直接使用):
运行结果:
总结其中的功能是:
Unity提供的主要几个接口分别为:
AndroidJavaClass 类
AndroidJavaObject 对象
AndroidJavaRunnable Unity对java.lang.Runnable object的实现
AndroidJavaProxy 接口,用于实现任何java接口;通过invoke调用接口中的方法
AndroidJavaException 继承于Exception的android异常类
有这几个东西,就可以调用实现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
今天实现了在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<AndroidJavaObject>("currentActivity"); activity.Call("runOnUiThread", new AndroidJavaRunnable(() => { AndroidJavaObject builder = new AndroidJavaObject("android.app.AlertDialog$Builder", activity); builder.Call<AndroidJavaObject>("setTitle", "cyc title"); builder.Call<AndroidJavaObject>("setMessage", "cyc this is test dialog msg"); builder.Call<AndroidJavaObject>("setPositiveButton", "sure:)", new CycClickListener()); AndroidJavaObject dialog = builder.Call<AndroidJavaObject>("create"); dialog.Call("show"); })); } }
运行结果:
总结其中的功能是:
Unity提供的主要几个接口分别为:
AndroidJavaClass 类
AndroidJavaObject 对象
AndroidJavaRunnable Unity对java.lang.Runnable object的实现
AndroidJavaProxy 接口,用于实现任何java接口;通过invoke调用接口中的方法
AndroidJavaException 继承于Exception的android异常类
有这几个东西,就可以调用实现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
相关文章推荐
- 使用C#调用Java带MIME附件WebService方法的初步设想
- C# 使用 Environment.GetCommandLineArgs 方法 制作*.exe和参数 供其他程序调用
- 使用JAVA编写网络通信程序
- android语音识别方法一:使用intent调用语音识别程序
- C# 使用MarshalByRefObject跨程序调用方法
- Android使用ksoap2调用C#中的webservice函数方法
- [转摘]使用IKVM在C#中调用JAVA程序
- android学习笔记---53_采用网页设计软件界面,以及使用android系统内置的浏览器,利用js调用java方法
- Android 使用html做UI的方法---js与java的相互调用
- C# 使用17方法编写Hello World程序(语法深度)
- java使用jacob调用c#.net程序
- Java如何操作Android的adb shell 之 我自己在程序中的使用方法
- 使用C#调用Java带MIME附件WebService方法的初步设想
- Android使用ksoap2调用C#中的webservice函数方法
- Mainsoft的Grasshopper让你可以使用C#编写Java可以调用的类库(免费了!)
- 使用JAVA编写网络通信程序
- C#客户端与Java程序使用socket连接并通信的兼容问题
- 2011/06/13 android使用html做UI的方法---js与java的相互调用
- 在java程序中使用jQuery抓取网页的新方法(java调用js解析引擎)
- C# 使用 Environment.GetCommandLineArgs 方法 制作*.exe和参数 供其他程序调用