HarmonyOS鸿蒙Next中是否有全局监听?

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

HarmonyOS鸿蒙Next中是否有全局监听? 在ios里面有一个uiappdelegate,可以控制全局。

在鸿蒙里面有没有类似的文件?

我需要全局监听usb是否有链接设备。如果一个一个文件去添加监听,那实在是太反人类了

5 回复

您好!

USB设备插拔的即时消息通知的demo实例如下:

import CommonEventManager from '@ohos.commonEventManager';
import Base from '@ohos.base';
import { Prompt } from '@kit.ArkUI';
@Entry
@Component
struct Index {
  subscriber: CommonEventManager.CommonEventSubscriber | undefined;
  build() {
    Column() {
      Row() {
        Text('Hello World');
        Button('监听usb')
          .onClick(() => {
            //订阅者信息
            let subscribeInfo:CommonEventManager.CommonEventSubscribeInfo = {
              events: [CommonEventManager.Support.COMMON_EVENT_USB_STATE]
            };
            //创建订阅者回调
            let createCB = (err:Base.BusinessError, commonEventSubscriber:CommonEventManager.CommonEventSubscriber) =>{
              if(!err) {
                console.info("createSubscriber");
                this.subscriber = commonEventSubscriber;
                // 订阅公共事件回调
                CommonEventManager.subscribe(this.subscriber, (err: Base.BusinessError, data: CommonEventManager.CommonEventData) => {
                  if (err) {
                    console.error(`Failed to subscribe common event. Code is ${err.code}, message is ${err.message}`);
                    return;
                  } else {
                    console.info(`CommonEventAndNotification: requestEnableNotification....${JSON.stringify(data)}`)
                    Prompt.showToast({
                      message: 'emm: ' + JSON.stringify(data)
                    })
                  }
                })
              } else {
                console.error(`createSubscriber failed, code is ${err.code}, message is ${err.message}`);
              }
            }
            //创建订阅者
            try {
              CommonEventManager.createSubscriber(subscribeInfo, createCB);
            } catch (error) {
              let err:Base.BusinessError = error as Base.BusinessError;
              console.error(`createSubscriber failed, code is ${err.code}, message is ${err.message}`);
            }
          })
      }
      .height('100%')
    }
    .width('100%')
  }
}

您看下这个demo是否能解决您的问题?

更多关于HarmonyOS鸿蒙Next中是否有全局监听?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


我发工单的时候,工作人员让我开启无限递归去解决。然后有点掉帧,所以我放在了一个worker去无限递归,算是解决了。

您看这个demo可以解决您的问题吗,无限递归后续可能存在性能问题?

在HarmonyOS鸿蒙Next中,存在全局监听机制。具体来说,系统提供了AbilityLifecycleCallback接口,用于监听应用内所有Ability的生命周期变化。开发者可以通过实现该接口,并在Application类中注册,来监听应用内所有Ability的创建、销毁、前后台切换等事件。此外,系统还提供了诸如WindowFocusChangeListener等接口,用于监听窗口焦点的变化。这些机制允许开发者在应用层面实现全局的事件监听,从而更好地管理应用状态和资源。

在HarmonyOS鸿蒙Next中,确实支持全局监听机制。通过使用AbilityService的生命周期回调方法,开发者可以实现对应用全局状态的监听。例如,onForegroundonBackground方法分别用于监听应用进入前台和后台的事件。此外,还可以通过EventBusBroadcast等机制实现跨组件的全局事件监听。这些机制帮助开发者更好地管理应用状态,提升用户体验。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!