1.Unity调用Android

根据unity用户手册,unity可以采用native code(c/c++),但是也提供了C#调用方法,本文对此进行简单讲解。

2.Unity获取android类

通过下述方法即可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity。继而可以调用MainActivity的静态方法getIntentResult。其返回值为string,如果无返回值,则直接调用CallStatic即可。

  1. using (AndroidJavaClass mainActivityClass = new AndroidJavaClass("com.ii.intentreceiver.MainActivity"))
  2. {
  3. Debug.Log("IntentReceiver start catch infomation");
  4. try
  5. {
  6. result = mainActivityClass.CallStatic<string>("getIntentResult");
  7. }
  8. catch(Exception ex)
  9. {
  10. Debug.Log("IntentReceiver get result failed:" + ex.Message);
  11. }
  12. }

3.Unity获取android类的实例

通过下述方法即可获取包com.ii.intentreceiver(可类比于C#命名空间)下的类MainActivity的一个实例。继而可以调用MainActivity的方法getResult。其返回值为Android定义的一个实例,所以返回值为AndroidJavaObject类型,如果无返回值,则直接调用Call即可。

  1. try
  2. {
  3. using (AndroidJavaObject main = new AndroidJavaObject("com.ii.intentreceiver.MainActivity",null))
  4. {
  5. intentJavaObject = main.Get<AndroidJavaObject>("getResult");
  6. }
  7. }
  8. catch(AndroidJavaException ex)
  9. {
  10. Debug.Log("Exception while connecting to the Activity:" + ex.ToString());
  11. return null;
  12. }

3.获取Unity的Activity

即可获取unity的currentActivity

  1. private static string unityPlayerClass = "com.unity3d.player.UnityPlayer";
  2. public static AndroidJavaObject GetActivity()
  3. {
  4. AndroidJavaClass jc = new AndroidJavaClass(unityPlayerClass);
  5. if (jc == null)
  6. {
  7. Debug.LogErrorFormat("Failed to get Unity Player class, {0}", unityPlayerClass);
  8. return null;
  9. }
  10. AndroidJavaObject activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
  11. if (activity == null)
  12. {
  13. Debug.LogError("Failed to obtain Android Activity from Unity Player class.");
  14. return null;
  15. }
  16. return activity;
  17. }

4.Unity获取Android回调结果

4.1 Android定义的接口

此处Android端通过接口来实现的回调

  1. package com.ii.Manager;
  2. public class PluginCallback {
  3. public interface ResultCallback {
  4. public void OnSuccess(String result, String hint);
  5. public void OnError(String result, int errorCode);
  6. }
  7. }

Android层方法:

  1. package com.ii.Manager;
  2. public class Method {
  3. public void Execute(PluginCallback.ResultCallback callback){。。。}
  4. }

4.2 Unity定义相应的类

接受回调的类:
此类要继承AndroidJavaProxy,同时根据原Android中的接口定义两个同名的方法。

  1. public delegate void SuccessHandler(string result, string hint);
  2. public delegate void ErrorHandler(string result, int errorCode);
  3. class ExecuteCallback : AndroidJavaProxy
  4. {
  5. SuccessHandler successHandler;
  6. ErrorHandler errorHandler;
  7. public InstallApkCallback(SuccessHandler successCallback,
  8. ErrorHandler errorCallback)
  9. : base("com.ii.Manager.PluginCallback$ResultCallback")
  10. {
  11. successHandler = successCallback;
  12. errorHandler = errorCallback;
  13. }
  14. public void OnSuccess(string result, string hint)
  15. {
  16. if (successHandler != null)
  17. successHandler(result, hint);
  18. }
  19. public void OnError(string result, int errorCode)
  20. {
  21. if (errorHandler != null)
  22. errorHandler(result, errorCode);
  23. }
  24. }

4.3 Unity使用方法

在new ExecuteCallback(null,null)处填入回调方法。

  1. AndroidJavaObject jo = new AndroidJavaObject("package com.ii.Manager.Method");
  2. jo.Call("Execute",new ExecuteCallback(null,null));

Unity调用Android的更多相关文章

  1. Unity调用Android类方法

    Unity调用Android类方法 1.  添加Unity的classes.jar文件 创建一个Android工程AndroidUnityDemo. 由于Unity的版本不同,直接在Unity安装包文 ...

  2. unity 调用android函数

    unity 调用android函数 分类: unity2013-12-19 17:54 475人阅读 评论(0) 收藏 举报 unityandroidjar 我们知道,安卓project都有一个And ...

  3. Unity调用Android相册

    最近有一个项目有这个需求,让用户上传自己的交易凭证的截图,之前因为对调Android原生的东西不太熟悉,就先放了一边 因为项目已经上线,只不过是该功能未开放而已,那么现在为什么要写这篇博客呢,是因为. ...

  4. Andriod Unity 调用android函数

    //首先这是一个前沿 //我看了多的资料,还看了近半个小时的 android activity 的讲解 终于打出了apk //接下来开始 //一步一步的跟着我走 1.创建一个android项目或者一个 ...

  5. Unity 调用android插件

    1. Unity的Bundle Identifier必须和你的android报名一致 Activity和View的区别: Activity应该是一个展示页面,View是页面上一些按钮视图等等. 如何调 ...

  6. Unity调用Android的两个方式:其一、调用jar包

    unity在Android端开发的时候,免不了要调用Java:Unity可以通过两种方式来调用Android:一是调用jar.二是调用aar. 这篇文章主要讲解怎么从无到有的生成一个jar包,然后un ...

  7. unity调用Android百度地图

    由于个人是Android小白,在这个配置上面被折磨了很久,因此写下这篇文章 工具:eclipse + unity5.6.1 首先去百度地图开发者平台下载你需要的资源,我只需要显示地图和定位,这个时候你 ...

  8. unity调用Android的jar包

    简介 有一些手机功能,Unity没有提供相应的接口,例如震动,例如不锁屏,例如GPS,例如... 有太多的特殊功能Unity都没有提供接口,这时候,我们就需要通过使用Android原生的ADT编辑器去 ...

  9. unity调用Android的两种方式:其二,调用aar包

    上一篇我们讲了unity如何调用jar包 http://www.cnblogs.com/Jason-c/p/6743224.html, 现在我们介绍一下怎么生成aar包和unity怎么调用aar 一. ...

随机推荐

  1. Python学习笔记整理总结【Django】:Model操作(二)

    1.操作汇总 # 增 # # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs # obj = models ...

  2. Spring 梳理 - @Component

    使用@Component注解,表示该类定义为Spring管理Bean,使用默认value(可选)属性表示Bean标识符.如果不指定标识符,默认为首字母小写类名.例如类UserController的标识 ...

  3. Spring 梳理-MVC-前端控制器DispatchServlet及URL请求处理过程

    大多数基于java的web框架,都有前端控制器 spring mvc请求过程 1. 请求会首先发送到DispatchServlet,这是spring的前置Servlet,它会接收请求并转发给sprin ...

  4. ZK集群如何保证数据一致性源码阅读

    什么是数据一致性? 只有当服务端的ZK存在多台时,才会出现数据一致性的问题, 服务端存在多台服务器,他们被划分成了不同的角色,只有一台Leader,多台Follower和多台Observer, 他们中 ...

  5. linux服务器创建虚拟路径解决文件上传路径隔离问题

    需求环境 图片上传最简单的就是上传web项目下,这样图片与项目不可分离会产生很多不必要的影响.例如:重新部署项目需要把所有上传的图片再copy一份等. 图片与项目分离有好几种方式: 方式一.在linu ...

  6. 学习VBA

    学习VBA VBA 就是 (Visual basic for Application) 用的比较多的是在Excel中处理数据,可以方便快捷地使用编程方式来对数据进行操作. VBA 数据类型 Integ ...

  7. Golang的反射reflect深入理解和示例

    编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制.也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examin ...

  8. Solidity 编程实例--投票

    Voting 投票 思路是为每张选票创建一个合约,每个投票选项提供一个短名称.合约创建者作为会长将会给每个投票参与人各自的地址投票权. 地址后面的人们可以选择自己投票或者委托信任的代表人替他们投票.在 ...

  9. Java8新特性时间日期库DateTime API及示例

    Java8新特性的功能已经更新了不少篇幅了,今天重点讲解时间日期库中DateTime相关处理.同样的,如果你现在依旧在项目中使用传统Date.Calendar和SimpleDateFormat等API ...

  10. spring boot项目下application.properties中使用logging.path和logging.file时的细节

    logging.path仅仅用于指定日志输出的目录,且不能指定输出的文件名,且默认名为spring.log  若指定的是相对目录,则会生成在当前总项目的目录下 idea中新建sprnig boot项目 ...