IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity调用jar包或者aar包 -> 正文阅读

[游戏开发]Unity调用jar包或者aar包

最近一直在做VR云会议,使用到了华为云会议的服务,华为云会议服务没有提供Unity版本的SDK,提供了Android版本的native sdk,那就自己只能在Unity中自己封装一层来调用Android接口。在这过程中,碰到了一些问题,做一下总结。

1、获取当前的Application或者当前的Activity

            using AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            using AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            using AndroidJavaObject app = currentActivity.Call<AndroidJavaObject>("getApplication");

2、Android库的函数返回ArrayList,c#中如何转换呢?一般先返回AndroidJavaObject,然后把ArrayList转换成AndroidJavaObject[],最后在c#中遍历循环把数组中每个单元转换成你自己的结构体。

        public static AttendeeInfo ToAttendeeInfo(AndroidJavaObject attendeeObject)
        {
            AttendeeInfo attendeeInfo = new AttendeeInfo();

            attendeeInfo.setName(attendeeObject.Call<string>("getName"));
        }

        public List<AttendeeInfo> GetVideoAttendeeList()
        {
            using AndroidJavaObject attendeeListObj = IConfState.Call<AndroidJavaObject>("getVideoAttendeeList");
            if (attendeeListObj == null)
                return null;


            AndroidJavaObject[] objArray = attendeeListObj.Call<AndroidJavaObject[]>("toArray");

            List<AttendeeInfo> attendeeInfos = new List<AttendeeInfo>();
            foreach (var obj in objArray)
            {
                attendeeInfos.Add(AttendeeInfo.ToAttendeeInfo(obj));
            }

            return attendeeInfos;
        }

3、Android接口中,参数中有ArrayList参数,如何做呢?

先生存ArrayList的AndroidJavaObject,然后把C#每项转换成Android接口数组的每一项,调用add接口一个一个往里加。

        public SDKERR GeneralWatch(List<GeneralWatchItemParamEx> watchs)
        {
            using AndroidJavaObject watchList = new AndroidJavaObject("java.util.ArrayList");
            foreach (var watch in watchs)
            {
                watchList.Call<bool>("add", watch.ToXRAndroidJavaObject());
            }

            return SDKERR.ToSDKERR(IConfCtrl.Call<AndroidJavaObject>("generalWatch", watchList));
        }

4、参数中有回调函数,C#中如何传参呢?

在C#中生存一个class,指定继承AndroidJavaProxy。需要注意的是,回调接口在Android中只能是接口Interface,然后javaInterface就是android的路径。还有必须实现回调接口中的每个函数。基本类型可以直接匹配,如果是其他结构体,必须使用AndroidJavaObject。

    public class SdkCallback: AndroidJavaProxy
    {
        public readonly static string DEFALUT_JAVAINTERFACE = "com.huawei.hwmsdk.common.SdkCallback";
        public event Action<AndroidJavaObject> OnSuccess;
        public event Action OnFailed;

        public SdkCallback(string javaInterface) : base(javaInterface)
        {
        }

        public SdkCallback() : base(DEFALUT_JAVAINTERFACE)
        {
        }

        public void onFailed(AndroidJavaObject sdkerr)
        {
            SDKERR sDKERR = SDKERR.ToSDKERR(sdkerr);
            Debug.LogError("SdkCallback onFailed: " + sDKERR.ToString());

            OnFailed?.Invoke();
        }

        public void onSuccess(AndroidJavaObject var1)
        {
            OnSuccess?.Invoke(var1);
        }
    }

5、如何调用Android接口中enum类型呢?

AndroidJavaClass statuCodeClass = new AndroidJavaClass("com.huawei.huaweicloud.xrmeeting.rpc.core.RpcStatusCode");
AndroidJavaObject statusCode = statuCodeClass.GetStatic<AndroidJavaObject>("OK");
  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2022-01-25 10:54:26  更:2022-01-25 10:54:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 18:51:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码