目录

空间事件订阅

从API版本6.0.0(20)开始,支持订阅和取消订阅空间事件的能力。

场景介绍

Enterprise Space Kit为应用提供订阅空间事件的能力。订阅空间切换事件后,应用将在空间切换时收到通知,并执行预设的自定义动作。同时,也提供取消订阅空间事件的能力,支持应用在特定场景下灵活管理空间事件的订阅状态。

接口说明

详细接口说明可参考接口文档。

接口名 描述
subscribeEvent(eventId: EventType[], callback: AsyncCallback<EventData>): number 订阅空间事件,在相关事件触发时,通知应用侧。
unsubscribeEvent(subscribeId: number): void 取消订阅空间事件,在相关事件触发时,不再通知应用侧。

开发步骤

1.导入空间事件订阅API模块相关依赖。

import { AsyncCallback } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { spaceManager } from '@kit.EnterpriseSpaceKit';
import { ErrCode } from '../../common/ErrCode';

2.空间事件订阅API接口封装。

const TAG = '[Sample_SpaceManagerSample]';
const DOMAIN = 0xF811;

export class SubscribeSpaceEventApi {
  static subscribeEvent(eventIds: spaceManager.EventType[], callback: AsyncCallback<spaceManager.EventData>): number {
    try {
      const subscribeId = spaceManager.subscribeEvent(eventIds, callback);
      hilog.info(DOMAIN, TAG, `Succeeded in subscribing event. subscribeId: ${subscribeId}`);
      return ErrCode.OK;
    } catch (err) {
      hilog.error(DOMAIN, TAG, `Failed to subscribe event. Code: ${err.code}, message: ${err.message}`);
      return ErrCode.ERR;
    }
  }

  static unsubscribeEvent(subscribeId: number): void {
    try {
      spaceManager.unsubscribeEvent(subscribeId);
      hilog.info(DOMAIN, TAG, 'Succeeded in unsubscribing event');
    } catch (err) {
      hilog.error(DOMAIN, TAG, `Failed to unsubscribe event. Code: ${err.code}, message: ${err.message}`);
    }
  }
}

3.导入空间事件订阅业务实现相关依赖。

import { router } from '@kit.ArkUI';
import { spaceManager } from '@kit.EnterpriseSpaceKit';
import { SubscribeSpaceEventApi } from '../api/SubscribeSpaceEventApi'
import { ErrCode } from '../../common/ErrCode';
import { hilog } from '@kit.PerformanceAnalysisKit';

4.空间事件订阅业务相关实现。

const TAG = '[Sample_SpaceManagerSample]';
const DOMAIN = 0xF811;

@Entry
@Component
struct SubscribeSpaceEventPage {
  subscribe() {
    let eventIds: spaceManager.EventType[] = [spaceManager.EventType.EVENT_WORKSPACE_SWITCHED];
    let callBack = (error: BusinessError, data: spaceManager.EventData) => {
      if (error) {
        hilog.error(DOMAIN, TAG, `error info:${error?.code}, err message:${error?.message}`);
      } else {
        hilog.info(DOMAIN, TAG, `event: ${data.event},currentWorkSpaceId: ${data.currentWorkspaceId}`);
        // 处理事件
      }
    };
    if (SubscribeSpaceEventApi.subscribeEvent(eventIds, callBack) !== ErrCode.OK) {
      // 订阅失败处理
      hilog.error(DOMAIN, TAG, 'Failed to subscribe event!');
      return;
    }

    // 订阅成功处理
  }

  unSubscribe() {
    let subscribeId = 100; // 由订阅空间事件得到的订阅ID。
    SubscribeSpaceEventApi.unsubscribeEvent(subscribeId);
  }

  build() {
    Column() {
      Row() {
        Button($r('app.string.subscribe'))
          .buttonCommonStyle()
          .onClick(() => {
            this.subscribe();
          })
      }

      Row() {
        Button($r('app.string.unSubscribe'))
          .buttonCommonStyle()
          .onClick(() => {
            this.unSubscribe();
          })
      }

      Row() {
        Button($r('app.string.back'))
          .buttonCommonStyle()
          .onClick(() => {
            router.back();
          })
      }
    }
  }
}

@Extend(Button)
function buttonCommonStyle() {
  .width(200)
  .height(50)
  .backgroundColor('#6366F1')
  .fontColor('#FFFFFF')
  .fontSize(14)
  .margin({ left: 20, bottom: 5 })
}