HarmonyOS 鸿蒙Next NativeXComponent获取window问题

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next NativeXComponent获取window问题

Native中获取XComponent window,只能通过map方式来存储NativeXComponent,然后使用时通过id查找吗,我看官方例子都是这样的,有没有其他方式获取,比如可以在Arkts层监听onCreate回调,然后再通过native获取对应的window不呢?
在同一个页面,有2个播放器同时播放,我希望直接通过Arkts层就能区分哪个播放器使用那个XComponent,而不用再公共层去遍历,通过id查找。


更多关于HarmonyOS 鸿蒙Next NativeXComponent获取window问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

一、获取Xcomponent对应的Native Window:

参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/native-window-guidelines

可直接在事件回调OnSurfaceCreatedCB中获取到对应的Native XComponent 和 Native Window

二、在ArkTS获取id和XCompont的映射关系:

由于id和controller都是ArtTS 组件指定的,context可在onLoad回调获取,

可在arkTS建立id和context的映射关系,context上可以挂载Native的方法,参考

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/drawing-guidelines

Native Window可在OnSurfaceCreatedCB获取

通过context上挂载的方法可以操作Native Window

三、如希望ArtTS能响应特定的Native事件,可参考:

1. https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/drawing-guidelines

参考示例代码中绑定方法到context上的部分,绑定一个回调注册函数如SetEventFunction

2. 在ArkTS侧声明回调函数,如doAction,在onLoad获取到context后,注册该回调到Native

this.context.SetEventFunction(this.doAction.bind(this))

3. 参考https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/use-napi-asynchronous-task

在Native侧的SetEventFunction解析并创建该回调的reference

napi_create_reference(env, args[0], 1, &ref)

4. Native事件触发后,调用ArkTS的回调

napi_get_reference_value(env, ref, &callback)

...

napi_call_function(env, undefined, callback, 1, callbackArg, &result)

参数可以携带id等标识

更多关于HarmonyOS 鸿蒙Next NativeXComponent获取window问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以用surfaceid通过ohnativewinodw给的方法获取window对象

在HarmonyOS鸿蒙系统中,Next NativeXComponent获取window的问题通常涉及到组件与窗口管理的交互。若你需要从NativeXComponent中获取window对象,可以考虑以下途径:

  1. NativeXComponent生命周期方法:检查组件的生命周期方法,如onAttachedToWindowonDetachedFromWindow,这些方法中可能会提供window相关的引用或回调。

  2. Context获取Window:通过组件的上下文(Context)尝试获取Window对象。在某些情况下,可以通过Context.getWindow()(如果存在此方法)或直接访问组件的getWindow()方法(如果组件类继承了适当的类)。

  3. WindowManager服务:利用系统服务WindowManager来获取窗口信息,但这通常用于创建或管理窗口,而非直接获取当前组件的window。

  4. Native层接口:考虑通过JNI(Java Native Interface)调用原生层接口,但这通常不推荐用于标准的NativeXComponent开发,除非有特定的原生层集成需求。

  5. API文档与示例代码:查阅最新的HarmonyOS开发文档和示例代码,看是否有关于NativeXComponent获取window的官方指导或示例。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部