团结引擎+OpenHarmony 记录 (持续更新中)
获取不到的原因是因为二者不在同一个线程中,所以数据没有同步。而 globalThis.context 数据进行了同步。(TuanjieMainWorkerHandler.ts中可以看到)在进行绘制 UI 的时候 ,如果组件有 Native API 就可能不会显示出来,例如 web 控件就不能展示出来,刚加上权限的时候 会报错 因为缺少 reason ,添加上就不会报错了。只有纯 UI 控件是可以展
1 TuanjiePlayerAbility.ts 中获取 content 引用
- globalThis.AbilityContext
在 TuanjiePlayerAbility.ts 中是可以获取到的
但是在 tslib 或者中 globalThis.AbilityContext 是无法获取到的 - GetFromGlobalThis(‘AbilityContext’);
同样
在 TuanjiePlayerAbility.ts 中是可以获取到的
但是在 tslib 或者中 GetFromGlobalThis(‘AbilityContext’) 是无法获取到的 - globalThis.context
TuanjiePlayerAbility.ts 和 tslib 中都是可以获取到的
总结:
获取不到的原因是因为二者不在同一个线程中,所以数据没有同步。而 globalThis.context 数据进行了同步。(TuanjieMainWorkerHandler.ts中可以看到)
2 权限
"requestPermissions": [
{
"name": "ohos.permission.CAMERA",
"reason": "$string:Permisson_camera_des",
"usedScene": {
"abilities": [
"TuanjiePlayerAbility"
],
"when": "always"
}
}
]
刚加上权限的时候 会报错 因为缺少 reason ,添加上就不会报错了
3 ArkUI 实时预览
在进行绘制 UI 的时候 ,如果组件有 Native API 就可能不会显示出来,例如 web 控件就不能展示出来,
只有纯 UI 控件是可以展示出来的,注释掉 web控件后就可以
- 1 首先得打开 ets文件,或者 html 的文件
- 2 修改属性后保存就可以实时观察到更改
4 鸿蒙向团结发送消息
tuanjie.TuanjieSendMessage(“GameObjectName”, “FunctionName”,“Funparams”);
注意:
- 1 保证 物体一直存在,参数要有且仅有一个 ,并且是字符串类型。
- 2 调用的方法不能是静态方法。
5 项目的配置信息
module.json5
- deviceTypes 设备的类型
- abilities 是ability 相关的 例如 最终hap安装后的名称 ,icon 等
- requestPermissions 用到的相关权限,及其描述
注意:
1项目里用到的权限都必须在这里提前写上,不然会出现请求权限时,无权限弹窗。
2 权限弹窗拒绝过一次后,下次不会在弹提示弹窗。
6 鸿蒙和团结 消息传递
如果ts的方法中 用到了异步,async 或者 await, C# 是无法直接获取到真实的值的,可以通过
tuanjie.TuanjieSendMessage(“GameObjectName”, “FunctionName”,“Funparams”); 来传递消息和数据
7 团结 tslib鸿蒙桥接文件
如果 ClassHarmonyToUnity 中有静态方法,C#是无法调用到,
而在StaticClassHarmonyToUnity 中静态方法和 正常方法 都是可以调用到的
C#端 调用方法
ts端
8 页面跳转
如果跳转页面不成功 可能是忘记在 main_page.json中添加了
resource/base/profile/main_pages.json
9 鸿蒙手势操作
如果想在 Unity中 自己处理 手势返回的操作
在 鸿蒙里可以将 返回的事件拦截,自己进行处理
10 在鸿蒙中 要考虑不同线程的问题
C# 调用 ts ,是在另外的线程里处理的,如果涉及到跳转页面,会报线程错误。鸿蒙有一个模块,解决在同一进程不同线程间,或同一进程同一线程内,发送和处理事件的能力,包括持续订阅事件、单次订阅事件、取消订阅事件,以及发送事件到事件队列的能力。
更多推荐
所有评论(0)