Unity3d和Android之间互相调用
摘抄博客 Unity3d Android SDK接入解析(一)Unity3d 与 Android之间的互相调用,一共四章,一定要看完
No1:
总体来说Unity3d与Android之间的互相调用,是通过Unity3d提供的classes.jar来实现的
No2:
常见的方法就是
1)在Android层定义好接口
2)在Unity中通过反射调用(反射大法好啊,真是好)
No3:
UnityPlayer是FrameLayout的一个子类,而currentActivity则是UnityPlayer类中的静态对象。
No3:
我们一般建立了一个新的MyActivity继承UnityPlayerActivity,并在AndroidManifest中把MyActivity设置为启动的Activity,然后使用currentActivity这个jo来调用方法。
No4:
新版Unity生成的unity-class.jar中类的继承关系变简单了:UnityPlayerActivity->Activity,之前的UnityPlayerNativeActivity被废弃了
No5:
UnityPlayerActivity中
mUnityPlayer = new UnityPlayer(this);
把上下文传进去
在UnityPlayer中
public UnityPlayer(Context var1) {
super(var1);
if (var1 instanceof Activity) {
currentActivity = (Activity)var1;
}
把上下文传给currentActivity,所以currentActivity就是当前的上下文
No6:
Android SDK的接入一般分为两种
1)一种是把Unity的工程导出google project的形式进行接入
2)另一种是通过把Android的工程做成Plugins的形式进行接入
对比
No7:
只有当需要在Activity的生命周期中执行一些操作时,我们才需要一个中间Activity去完成这些与生命周期相关的操作,而其他情况下,一个Class足以
No8:
Unity调用Android方法默认不是在UI主线程上执行的,所以如果你想要对UI界面进行操作,那就要使用runOnUiThread才行。
No9:
每个渠道SDK有两个class,一个管理账号信息,一个管理支付信息,账号与支付分离
No10:
调用上,C#初始化“包名+类名”的AndroidJavaClass对象,使用这个对象来调用对应功能
No11:
Activity生命周期的处理:(C#处理的方式)
android代码
public void lifeCycle(int status) {
if (getActivity() == null) {
DybGSdkUtil.E("还未Init初始化,不执行生命周期操作 ");
return;
} switch (status) {
case DybGSdkConstants.onStart:
break;
case DybGSdkConstants.onResume:
BuoyOpenSDK.getIntance().showSmallWindow(getActivity());
break;
case DybGSdkConstants.onPause:
BuoyOpenSDK.getIntance().hideSmallWindow(getActivity());
BuoyOpenSDK.getIntance().hideBigWindow(getActivity());
break;
case DybGSdkConstants.onStop:
break;
case DybGSdkConstants.onDestroy:
OpenHwID.releaseResouce();
BuoyOpenSDK.getIntance().destroy(getActivity());
break;
default:
break;
}
}
C#调用
void OnApplicationPause(bool isPause)
{
if (isPause) {
string json = "{'status':'3'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
}
} void OnApplicationFocus(bool isFocus)
{
if (isFocus)
{
if (ajc_SDKCall != null){
string json = "{'status':'1'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
json = "{'status':'2'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
}
}
} void OnApplicationQuit()
{
string json = "{'status':'5'}";
ajc_SDKCall.CallStatic("uaLifeCycle",json);
}
// Android Activity生命周期
public static final int onStart = 1;
public static final int onResume = 2;
public static final int onPause = 3;
public static final int onStop = 4;
public static final int onDestroy = 5;
public static final int onRestart = 6;
No12:
如果想从android层传数据到unity层,使用UnityPlayer.UnitySendMessage(OBJNAME, "andToU3dCallback", "exit");方法
切记:这个API需要大写S开头的Send才能调出来,小写s开头的send调不出来,坑爹啊
欢迎关注我的微信公众号:安卓圈
Unity3d和Android之间互相调用的更多相关文章
- uLua学习笔记(三):Unity3D和Lua之间的相互调用
这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下: 先赞一个! Unity3D调用Lua Unity3D调用Lua的方 ...
- 两个APP之间怎么调用《IT蓝豹》
两个app之间怎么调用? (1):通过显示Intent 启动 首先:配置好B app 的action,即AndroidManifest.xml中声明 <intent-filter> ...
- Android 使用AIDL调用外部服务
好处:多个应用程序之间建立共同的服务机制,通过AIDL在不同应用程序之间达到数据的共享和数据相互操作, 本文包括: 1 .创建AIDL 服务端.2 .创建AIDL 客户端. 3.客户端调用服务端提供的 ...
- Android使用ksoap2调用C#中的webservice实现图像上传
目录: 一. android使用ksoap2调用webservice 二. 异步调用 三. Android使用ksoap2调用C#中的webservice实现图像上传参考方法 四. 图像传输中Base ...
- AllJoyn+Android开发案例-android跨设备调用方法
AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...
- Android上传图片之调用系统拍照和从相冊选择图片
Android上传图片之调用系统拍照和从相冊选择图片 本篇文章已授权微信公众号 guolin_blog (郭霖)独家公布 前言: 万丈高楼平底起,万事起于微末.不知不觉距离上篇博文已近四个月,2015 ...
- Java特性之多态父类与子类之间的调用
问题描述: Java三大特性,封装.继承.多态,一直没搞懂其中多态是什么,最近研究了一下,关于父类和子类之间的调用.下面是一个测试类,源代码如下: package com.test; public c ...
- html iframe 元素之间的调用
html iframe 元素之间的调用一.简介 一般需要引入一个独立页面的时候,我们会使用iframe.在业务需要的时候,我们需要在父页面与iframe页面之间进行交互.交互的时候,我们就需要使 用到 ...
- 在Android开发中调用Rest web服务(转)
首先从维基百科上拷贝一点Rest的基本概念给大家看看,然后我们再开始详解在Android中如何调用Rest服务.表象化状态转变(英文:Representational State Transfer,简 ...
随机推荐
- emacs(考场+平时)配置方案
考场配置: ;;在配置后面会对语句逐一解释的 (global-set-key (kbd "C-z") 'undo) (global-set-key (kbd "RET&q ...
- chrome面板介绍
Chrome开发者工具详解(1):Elements.Console.Sources面板 Chrome 开发者工具详解(2):Network 面板 Chrome开发者工具详解(3):Timeline面板 ...
- 关于Laravel 迁移数据库的问题
今天在Homestead 中用 php artisan migrate 迁移数据库时出现了拒绝的情况: ***之后发现只要修改项目文件夹下面的database.php 和.env 文件中的数据库配置, ...
- 卷积神经网络(CNN)学习笔记1:基础入门
卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01 | In Machine Learning | 9 Comments | 14935 Vie ...
- 数据库操作之整合Mybaties和事务讲解 5节课
1.SpringBoot2.x持久化数据方式介绍 简介:介绍近几年常用的访问数据库的方式和优缺点 1.原始java访问数据库 开发流程麻烦 ...
- Python3学习笔记17-类与实例
面向对象最重要的概念就是类(Class)和实例(Instance),必须牢记类是抽象的模板,比如Student类 而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可 ...
- Python3学习笔记07-List
Python有6个序列的内置类型,但最常见的是列表和元 序列都可以进行的操作包括索引,切片,加,乘,检查成员. 此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法. 创建一个列表, ...
- openstack swift节点安装手册3-最后的安装配置及验证
以下步骤都在controller节点上执行 1.远程获取/etc/swift/swift.conf文件: curl -o /etc/swift/swift.conf https://git.opens ...
- python脚本发送邮件
#!/usr/bin/python #_*_ coding:utf-8 _*_ from email.MIMEText import MIMEText from email.MIMEMultipart ...
- SpringMVC中fastjson支持jsonp的实现
前边一篇文章主要说了下前端处理jsonp的方式,这篇主要介绍了后台接收和响应jsonp的一种方式 继承fastjson消息转换器类:com.alibaba.fastjson.support.sprin ...