import commonEvent from '@kit.CommonEventKit';
import { BusinessError } from '@kit.ArkUI';

// 订阅屏幕锁定事件
let subscriber: commonEvent.CommonEventSubscriber | null = null;
let subscribeInfo: commonEvent.CommonEventSubscribeInfo = {
  events: ['usual.event.SCREEN_LOCKED', 'usual.event.SCREEN_UNLOCKED'] // 同时订阅锁屏和解锁事件
};

// 创建订阅者
commonEvent.createSubscriber(subscribeInfo, (err: BusinessError, commonEvent.CommonEventSubscriber) => {
  if (err) {
    console.error(`Failed to create subscriber, Code: ${err.code}, message: ${err.message}`);
    return;
  }
  subscriber = data;
  console.info('Succeeded in creating subscriber.');

  // 订阅公共事件
  commonEvent.subscribe(subscriber, (err: BusinessError, event: commonEvent.CommonEventData) => {
    if (err) {
      console.error(`Failed to subscribe, Code: ${err.code}, message: ${err.message}`);
      return;
    }
    // 根据事件类型处理
    if (event.event === 'usual.event.SCREEN_LOCKED') {
      console.info('Screen locked.');
      // 执行锁屏后的业务逻辑
    } else if (event.event === 'usual.event.SCREEN_UNLOCKED') {
      console.info('Screen unlocked.');
      // 执行解锁后的业务逻辑
    }
  });
});

// 在适当的时候取消订阅,例如页面销毁时
function unsubscribe() {
  if (subscriber) {
    commonEvent.unsubscribe(subscriber, (err: BusinessError) => {
      if (err) {
        console.error(`Failed to unsubscribe, Code: ${err.code}, message: ${err.message}`);
        return;
      }
      console.info('Succeeded in unsubscribing.');
    });
  }
}
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐