1.有关调用的一些问题:

(1).在C#中直接调用java中的代码,无返回值:

在java中:

 public static void setAge(Context context , int level) {}

在C#中:

 private static string JAVA_CLASS = "com.wonver.game";
private static string UNITY_CLASS = "com.unity3d.player.UnityPlayer";
public static void setAge(int age)
{
#if UNITY_EDITOR
#elif UNITY_ANDROID
AndroidJavaClass unityClass = new AndroidJavaClass(UNITY_CLASS);
AndroidJavaObject activity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
agent.CallStatic("setAge",activity, age);
#elif
}

(2).C#调用java中的代码,有返回值:

在java中:

 public static String getAge() {}

在C#中:

 public static string getAge()
{
#if UNITY_EDITOR
return null;
#elif UNITY_ANDROID
AndroidJavaObject agent= new AndroidJavaObject(JAVA_CLASS);
return agent.CallStatic<string>("getAge");
#endif
}

(3).java中被调用的方法需要传入Map,但是在C#中只有Dictionary

所以需要在C#中调用Java的时候,将Dictionary转成Map,再传给Java中的方法

在java中:

 public static void onUpload(String Id, Map<String, String> map) {}

在C#中:

 private static string JAVA_CLASS = "com.wenvor.Upload";
private static AndroidJavaObject agent = new AndroidJavaObject(JAVA_CLASS); Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("name", "wenvor");
dic.Add("age", "");
Upload.onUpload ("", dic); public static void onUpload (string Id, Dictionary<string, string> dictionary)
{
if(eventId == null)
{
return;
}
#if UNITY_EDITOR
#elif UNITY_ANDROID
AndroidJavaObject map = dicToMap(dictionary);
agent.CallStatic("onUpload", Id, map);
#endif
} #if UNITY_EDITOR
#elif UNITY_ANDROID
public static AndroidJavaObject dicToMap(Dictionary<string, string> dictionary)
{
if(dictionary == null)
{
return null;
}
AndroidJavaObject map = new AndroidJavaObject("java.util.HashMap");
foreach(KeyValuePair<string, string> pair in dictionary)
{
map.Call<string>("put", pair.Key, pair.Value);
}
return map;
}
#endif

2.C#中的Enum类型可以和Int,String类型相关转换

因为Enum类型的基类型是除Char外的任何整型,所以枚举类型的值是整型值。

3.Android的主线程和Unity引擎的初始化线程不在同一个线程,因此无法知晓什么时候Unity引擎初始化结束。

所以在做SDK的拓展层时候,不要针对SDK里面的OnCreate()方法里面的java代码进行封装,因为可能此时Unity引擎还没有初始化完,即使去调用拓展层的C#接口,

也会有一定的几率调不到。

 
4.

 void OnApplicationPause(bool pauseStatus)
{
#if UNITY_EDITOR
#elif UNITY_ANDROID
if(pauseStatus)
{
//TODO
//Activity的onPause()方法
}
else
{
//TODO
//Activity的onResume()方法
}
#endif
}

5.

在DCAgent.cs中:

 public static void attachCurrentThread()
{
AndroidJNI.AttachCurrentThread();
} public static void detachCurrentThread()
{
AndroidJNI.DetachCurrentThread();
}

6.关于Unity的全局管理类:

https://segmentfault.com/a/1190000000645262

 public class MyClass : MonoBehaviour {

     static MyClass _instance;

     static public MyClass Instance
{
get
{
if (_instance == null)
{
// 尝试寻找该类的实例。此处不能用GameObject.Find,因为MonoBehaviour继承自Component。
_instance = Object.FindObjectOfType(typeof(MyClass)) as MyClass; if (_instance == null) // 如果没有找到
{
GameObject go = new GameObject("_MyClass"); // 创建一个新的GameObject
DontDestroyOnLoad(go); // 防止被销毁
_instance = go.AddComponent<MyClass>(); // 将实例挂载到GameObject上
}
}
return _instance;
}
}
}

7.Android其实也可以调用Unity中的方法,具体实现就是通过UnityPlayer.UnitySendMessage()来实现的。

但是这个方法仅仅提供调用,不提供返回值,是一个Void类型的方法 。

【Unity】Unity中C#与Android中Java的互相调用遇到的一些问题的更多相关文章

  1. WebView中Js与Android本地函数的相互调用

    介绍 随着Html5的普及,html在表现力上不一定比原生应用差,并且有很强的扩展兼容性,所以越来越多的应用是采用Html与Android原生混合开发模式实现. 既然要实现混合开发,那么Js与Andr ...

  2. 在WebView中如何让JS与Java安全地互相调用

    在现在安卓应用原生开发中,为了追求开发的效率以及移植的便利性,使用WebView作为业务内容展示与交互的主要载体是个不错的折中方案.那么在这种Hybrid(混合式) App中,难免就会遇到页面JS需要 ...

  3. 【IOS】ios中NSUserDefault与android中的SharedPreference用法简单对比

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/3405308.html 有Android开发经验的朋友对Shar ...

  4. Android中的HTTP通信

    前言:近期在慕课网学习了慕课网课程Android中的HTTP通信,就自己总结了一下,其中参考了不少博文,感谢大家的分享. 文章内容包括:1.HTTP简介2.HTTP/1.0和HTTP/1.1之间的区别 ...

  5. Android中WebView的JavaScript代码和本地代码交互的三种方式

    一.Android中WebView的漏洞分析最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视 ...

  6. android中使用setVideoURI()播放视频

    最近在做一个demo,要求播放视频,记录一下.使用的是VideoView控件,如果播放网络视频的话,视频应该是渐进流式的,格式嘛,大家应该都知道,一般是H.263或者H.264格式的扩展名为3gp或者 ...

  7. Android 中Dialog的使用

    本文是参考ProAndroid的第10章Working with Dialogs的内容,在合适的地方添加了作者自己的一些见解最终成文. Android 中的对话框是一个展示在当前窗口上的小一号的窗口, ...

  8. 在android中读写文件

    在android中读写文件 android中只有一个盘,正斜杠/代表根目录. 我们常见的SDK的位置为:/mnt/sdcard 两种最常见的数据存储方式: 一.内存 二.本地 1.手机内部存储 2.外 ...

  9. Android中Intent传值与Bundle传值的区别详解

    Android中Intent传值与Bundle传值的区别详解 举个例子我现在要从A界面跳转到B界面或者C界面   这样的话 我就需要写2个Intent如果你还要涉及的传值的话 你的Intent就要写两 ...

随机推荐

  1. chrome ipc 网摘

    http://my.oschina.net/myspaceNUAA/blog/81632?p=1 http://lihuan623.blog.163.com/blog/static/138595845 ...

  2. nio简介

    上一篇  Java I/O演进与Linux网络I/O模型 一.传统BIO java传统bio编程概念: http://www.cnblogs.com/carl10086/p/6034563.html# ...

  3. Ubuntu 16.04 Django安装和配置

    之前有安装和配置过,换了台电脑,再安装和配置,忽然发现差不多都忘记了,这里记录下已备之后查阅. sudo apt-get install python-pip sudo apt-get install ...

  4. 我喜欢的快捷键 webstorm

    1.打开设置  ctrl+alt+s 2.重命名 rename  ctrl+r

  5. CSS3之响应式布局

    在没有C3的时候,响应式布局是通过js来实现的. 开始研究响应式web设计,CSS3 Media Queries是入门. Media Queries,其作用就是允许添加表达式用以确定媒体的环境情况,以 ...

  6. trove instance service 总结

    def create(self, req, body, tenant_id): # TODO(hub-cap): turn this into middleware LOG.info(_LI(&quo ...

  7. JDBC:四步完成MySQL数据库的连接

    ->首先,将MySQL的jar包引入 ->然后创建一个.properties的文件(例:connection.properties),在该文件中写入如下代码: jdbc.driver.cl ...

  8. 各种文件的ContentType

    CONTENT_TYPE = { 16 '.load': 'text/html', 17 '.123': 'application/vnd.lotus-1-2-3', 18 '.3ds': 'imag ...

  9. centOS静态ip设置

    设置静态IP地址 1,先搜索了一下,得到以下解释IP          P地址Netmark     子网掩码Gateway     默认网关HostName    主机名称DomainName  域 ...

  10. javascript深入理解js闭包(个人理解,大神勿喷)

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...