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. glib实践篇:接口定义与实现

    前言: 在上一篇讲解了基于glib实现抽象和继承后,当然这篇就得讲讲接口类型啦! 在JAVA中接口更多的弥补了其单继承所带来的缺陷,使其能够扩展很多功能,同时又不破坏它的结构.其实接口就是一种协议,在 ...

  2. NoSQL数据建模技术

    原文来自“NoSQL Data Modeling Techniques”,由酷壳网陈皓编译<NoSQL数据建模技术>.这篇文章看完之后,你可能会对NoSQL的数据结构会有些感觉.我的感觉是 ...

  3. Navicat连接不上MySQL

    [root@localhost init.d]# pwd /etc/init.d [root@localhost init.d]# mysql -u root -p Enter password: E ...

  4. MyBatis-Generator 逆向工程(生成异常缺少部分的方法)

    今日在使用 MyBatis-Generator 逆向工程时遇到了生成 mapper.java  , mapper.xml  时缺少部分方法. 正常的 Mapper.java 示例: public in ...

  5. DB2的基础指令 学习笔记

    =======DB2基础指令======= 1.打开数据库db2 connect to 数据库名;2.查看数据库中有哪些表db2 list tables ;3.查看数据库中的表结构db2 descri ...

  6. laravel5 MAC is invalid

    如果本机的环境更换过,项目中用来加密Crypt组件中的参数会变更. 如果出现这个问题,得更换数据库中加密后的变量 stackoverflow上找到的解决方法都是 composer dump-autol ...

  7. 在GNU/Linux下使用命令行自动挂载与卸载USB磁盘

    在命令行环境下如果每次都是靠手动敲入mount与umount命令来挂载与卸载USB磁盘是件很麻烦的事情.尤其是mount命令的参数非常多.比如,磁盘的分区类型(vfat.ntfs等),挂载的目录节点, ...

  8. jquery 使用attr() 函数对复选框无效的原因

     复选框是网站开发的时候经常用到的网页标签之一,常见的在页面上对复选框的操作包括取值和修改复选框的状态.在jquery中,常见的操作标签的值得函数为attr,然而在操作复选框的时候,通常采用的却是pr ...

  9. django模板 实现奇偶分行

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. 避免VMware P2V 过程中遇到的磁盘问题及解决 版本5.5

    正式步骤开始:填写红色框内相关要被转换成虚拟机的物理机器的账号信息 选择虚拟主机要转换到的目的主机,填写相关的账号信息 设置转换参数:这里要注意一下关于磁盘的设置,注意:如果源系统是LVM的磁盘卷不将 ...