HarmonyOS 鸿蒙Next中如何监听系统开机,息屏,亮屏等系统公共事件?

HarmonyOS 鸿蒙Next中如何监听系统开机,息屏,亮屏等系统公共事件?

4 回复

答案:CES(Common Event Service,公共事件服务)为应用程序提供订阅、发布和退订公共事件的能力。可以通过订阅系统公共事件来监听熄屏、亮屏和开机事件。开机事件使用“COMMON_EVENT_BOOT_COMPLETED”来监听。https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs/faqs-notification-kit-5

更多关于HarmonyOS 鸿蒙Next中如何监听系统开机,息屏,亮屏等系统公共事件?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


【解决方案】

系统定义的公共事件提供了公共事件清单。其中息屏、锁屏、开关机、系统时区等均属于系统公共事件。
可以通过订阅系统公共事件监听熄屏和亮屏。详情请参考示例代码

在HarmonyOS Next中,监听系统公共事件需使用@ohos.commonEventManager模块。通过调用commonEventManager.createSubscriber()方法创建订阅者,并传入包含事件类型(如usual.event.SCREEN_ONusual.event.SCREEN_OFF)的订阅信息。使用commonEventManager.subscribe()注册订阅者以接收事件通知。事件触发时,回调函数会处理相应逻辑。无需依赖Java或C语言,仅使用ArkTS实现。

在HarmonyOS Next中,可以通过CommonEventManager模块监听系统公共事件,包括开机、息屏、亮屏等。以下是实现步骤:

  1. 在module.json5配置文件中声明权限

    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.COMMON_EVENT_STANDBY",
            "reason": "监听系统休眠和唤醒事件"
          },
          {
            "name": "ohos.permission.COMMON_EVENT_BOOT_COMPLETED",
            "reason": "监听系统启动完成事件"
          }
        ]
      }
    }
    
  2. 订阅公共事件

    import commonEventManager from '[@ohos](/user/ohos).commonEventManager';
    import { BusinessError } from '[@ohos](/user/ohos).base';
    
    commonEventManager.createSubscriber(
      {
        events: [
          'usual.event.SCREEN_OFF',
          'usual.event.SCREEN_ON',
          'usual.event.BOOT_COMPLETED'
        ]
      },
      (err: BusinessError, subscriber: commonEventManager.CommonEventSubscriber) => {
        if (err) {
          console.error(`创建订阅者失败: ${err.code}, ${err.message}`);
          return;
        }
        console.info('订阅者创建成功');
    
        commonEventManager.subscribe(subscriber, (err: BusinessError, data: commonEventManager.CommonEventData) => {
          if (err) {
            console.error(`订阅事件失败: ${err.code}, ${err.message}`);
            return;
          }
          console.info(`收到事件: ${data.event}`);
          switch (data.event) {
            case 'usual.event.SCREEN_OFF':
              break;
            case 'usual.event.SCREEN_ON':
              break;
            case 'usual.event.BOOT_COMPLETED':
              break;
          }
        });
      }
    );
    
  3. 取消订阅(在适当时机,如页面销毁时):

    commonEventManager.unsubscribe(subscriber, (err: BusinessError) => {
      if (err) {
        console.error(`取消订阅失败: ${err.code}, ${err.message}`);
        return;
      }
      console.info('取消订阅成功');
    });
    

注意事项:

  • 确保在应用启动时完成订阅,以便及时接收事件。
  • 权限需在应用安装时由用户授权,否则无法接收事件。
  • 事件字符串需准确,如usual.event.SCREEN_OFF为息屏事件。
回到顶部