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");}));}}

运行结果:

Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用任何方法_第1张图片

总结其中的功能是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 Unity-Android通信:AndroidJava 使用Unity c#编写Android程序调用任何方法_第2张图片


原文链接:http://blog.csdn.net/yanchezuo/article/details/52261944

更多相关文章

  1. Android例子—设置Activity全屏的三种方法
  2. Android stuio在MainActivity中运行java的main方法
  3. android中的提示信息显示方法(toast应用)
  4. adb devices 找不到设备的解决方法
  5. android 按home键返回到桌面后,再按桌面应用图标又重新打开该应用
  6. android获取各种系统路径的方法
  7. android 应用如何获取系统权限 以及root系统方法
  8. Android 和 JS 交互时调用不成功解决方法
  9. android应用程序最小化的处理方法

随机推荐

  1. android网络图片的下载
  2. Android PinyinIME 源码笔记 -- 0. 简介
  3. Android Webview调用系统相册实现多选图
  4. Android图形报表之AchartEngine(附开发包
  5. Installation error: INSTALL_FAILED_INS
  6. 解决ListView的ItemView中带有Button时,On
  7. android前台渲染图片
  8. Android应用程序中的多个Activity的显示
  9. Android:控件AutoCompleteTextView 客户端
  10. 下载android sdk更新包离线安装解决方案