从API版本6.0.0(20)开始,支持应用开启双空间功能并创建、查询、删除工作空间的能力。
从API版本26.0.0开始,支持查询设备双空间状态、判断工作空间是否为企业空间,以及切换工作空间。
Enterprise Space Kit为应用提供启用双空间功能及管理工作空间的能力。应用需要先使能工作空间,然后才能创建个人空间。同时,提供查询、移除工作空间的功能。
双空间分别为企业空间和个人空间,企业空间为完全受企业管控的通用办公空间,个人空间为因工作需要对外交流、作业、开源开发等用途的空间。
详细接口说明可参考接口文档。
| 接口名 | 描述 |
|---|---|
| enableWorkspace(enable: boolean): Promise<void> | 启用或禁用工作空间功能。MDM应用调用该接口后,还需调用MDM Kit的restrictions.setDisallowedPolicy接口,启用INACTIVE_USER_FREEZE设备特性,以开启非活跃用户运行能力。 |
| createWorkspace(localName: string, workspaceType: WorkspaceType, params?: CreateWorkspaceParams): Promise<WorkspaceInfo> | 创建工作空间并返回工作空间信息。 |
| queryWorkspace(queryFlag: QueryType): Promise<WorkspaceInfo[]> | 查询工作空间信息并返回结果。 |
| removeWorkspace(workspaceId: number): Promise<void> | 移除工作空间。 |
| isEnterpriseWorkspaceEnabled(): Promise<boolean> | 查询设备是否开启双空间并返回结果。 |
| isEnterpriseWorkspace(workspaceId?: number): Promise<boolean> | 查询工作空间是否为企业空间并返回结果。 |
| switchWorkspace(workspaceId?: number): Promise<void> | 切换工作空间。 |
1.导入工作空间管理API模块相关依赖。
import { spaceManager } from '@kit.EnterpriseSpaceKit';
import { ErrCode } from '../../common/ErrCode';
import { hilog } from '@kit.PerformanceAnalysisKit'; 2.工作空间管理API接口封装。
const TAG = '[Sample_SpaceManagerSample]';
const DOMAIN = 0xF811;
export class SpaceLifeCircleManagerApi {
static async createWorkspace(localName: string, workspaceType: spaceManager.WorkspaceType,
params: spaceManager.CreateWorkspaceParams): Promise<spaceManager.WorkspaceInfo | undefined> {
try {
const workspaceInfo: spaceManager.WorkspaceInfo =
await spaceManager.createWorkspace(localName, workspaceType, params);
hilog.info(DOMAIN, TAG,
`Succeeded in creating workspace, workspaceInfo:` + JSON.stringify(workspaceInfo));
return workspaceInfo;
} catch (err) {
hilog.error(DOMAIN, TAG,
`Failed to create workspace. Code: ${err.code}, message: ${err.message}`);
return undefined;
}
}
static async enableWorkspace(enable: boolean): Promise<number> {
try {
await spaceManager.enableWorkspace(enable);
hilog.info(DOMAIN, TAG, 'Succeeded in enabling workspace');
return ErrCode.OK;
} catch (err) {
hilog.error(DOMAIN, TAG, `Failed to enable workspace. Code: ${err.code}, message: ${err.message}`);
return ErrCode.ERR;
}
}
static async queryWorkspace(queryType: spaceManager.QueryType): Promise<spaceManager.WorkspaceInfo[]> {
try {
const spaces: spaceManager.WorkspaceInfo[] = await spaceManager.queryWorkspace(queryType);
hilog.info(DOMAIN, TAG, `Succeeded in querying workspace`);
return spaces;
} catch (err) {
hilog.error(DOMAIN, TAG, `Failed to query workspace. Code: ${err.code}, message: ${err.message}`);
return [];
}
}
static async removeWorkspace(workspaceId: number): Promise<number> {
try {
await spaceManager.removeWorkspace(workspaceId);
hilog.info(DOMAIN, TAG, 'Succeeded in removing workspace');
return ErrCode.OK;
} catch (err) {
hilog.error(DOMAIN, TAG, `Failed to remove workspace. Code: ${err.code}, message: ${err.message}`);
return ErrCode.ERR;
}
}
static async isEnterpriseWorkspaceEnabled(): Promise<boolean> {
try {
const status = await spaceManager.isEnterpriseWorkspaceEnabled();
hilog.info(DOMAIN, TAG, `Succeeded in getting enterprise workspace enabled. enabled: ${status}`);
return status;
} catch (err) {
hilog.error(DOMAIN, TAG,
`Failed to get enterprise workspace enabled. Code: ${err.code}, message: ${err.message}`);
return false;
}
}
static async isEnterpriseWorkspace(): Promise<boolean> {
try {
const isEnterpriseWorkspace = await spaceManager.isEnterpriseWorkspace();
hilog.info(DOMAIN, TAG, `Succeeded in getting enterprise workspace. isEnterprise: ${isEnterpriseWorkspace}`);
return isEnterpriseWorkspace;
} catch (err) {
hilog.error(DOMAIN, TAG, `Failed to get enterprise workspace. Code: ${err.code}, message: ${err.message}`);
return false;
}
}
static async switchWorkspace(workspaceId: number): Promise<number> {
try {
await spaceManager.switchWorkspace(workspaceId);
hilog.info(DOMAIN, TAG, `Succeeded in switching enterprise workspace. workspaceId: ${workspaceId}`);
return ErrCode.OK;
} catch (err) {
hilog.error(DOMAIN, TAG, `Failed to switch enterprise workspace. Code: ${err.code}, message: ${err.message}`);
return ErrCode.ERR;
}
}
} 3.导入工作空间管理业务实现相关依赖。
import { router } from '@kit.ArkUI';
import { spaceManager } from '@kit.EnterpriseSpaceKit';
import { SpaceLifeCircleManagerApi } from '../api/SpaceLifeCircleManagerApi';
import { ErrCode } from '../../common/ErrCode';
import { hilog } from '@kit.PerformanceAnalysisKit'; 4.工作空间管理业务相关实现。
const TAG = '[Sample_SpaceManagerSample]';
const DOMAIN = 0xF811;
@Entry
@Component
struct SpaceLifeCircleManagerPage {
async enableWorkspace() {
// 预置参数
const enable: boolean = true;
if (await SpaceLifeCircleManagerApi.enableWorkspace(enable) !== ErrCode.OK) {
// 异常处理
hilog.error(DOMAIN, TAG, 'Failed to enable workspace!');
return;
}
// 处理后置逻辑
}
async createWorkspace() {
// 预置参数
const localName: string = 'localName'; // 空间名称,由用户传入
const workspaceType: spaceManager.WorkspaceType = spaceManager.WorkspaceType.ADMIN;
const params: spaceManager.CreateWorkspaceParams = {
shortName: 'test'
};
const workspaceInfo: spaceManager.WorkspaceInfo | undefined = await
SpaceLifeCircleManagerApi.createWorkspace(localName, workspaceType, params);
if (workspaceInfo === undefined) {
// 异常处理
hilog.error(DOMAIN, TAG, 'Failed to create workspace!');
return;
}
// 处理后置逻辑
}
async queryWorkspace() {
const queryType: spaceManager.QueryType = spaceManager.QueryType.ALL;
let spaceInfo = await SpaceLifeCircleManagerApi.queryWorkspace(queryType)
// 处理后置逻辑
}
async removeWorkspace() {
const workspaceId: number = 101; // 需要删除空间的ID,由用户传入
if (await SpaceLifeCircleManagerApi.removeWorkspace(workspaceId) !== ErrCode.OK) {
// 异常处理
hilog.error(DOMAIN, TAG, 'Failed to remove workspace!');
return;
}
// 处理后置逻辑
}
async isEnterpriseWorkspaceEnabled() {
const status = await SpaceLifeCircleManagerApi.isEnterpriseWorkspaceEnabled();
// 处理后置逻辑
}
async isEnterpriseWorkspace() {
const isEnterpriseWorkspace = await SpaceLifeCircleManagerApi.isEnterpriseWorkspace();
// 处理后置逻辑
}
async switchWorkspace() {
const workspaceId: number = 101; // 已经创建的工作空间ID
if (await SpaceLifeCircleManagerApi.switchWorkspace(workspaceId) !== ErrCode.OK) {
// 异常处理
hilog.error(DOMAIN, TAG, 'Failed to switch workspace!');
return;
}
// 处理后置逻辑
}
build() {
Column() {
Row() {
Button($r('app.string.enableWorkspace'))
.buttonCommonStyle()
.onClick(() => {
this.enableWorkspace();
})
}
Row() {
Button($r('app.string.createWorkspace'))
.buttonCommonStyle()
.onClick(() => {
this.createWorkspace();
})
}
Row() {
Button($r('app.string.queryWorkspace'))
.buttonCommonStyle()
.onClick(() => {
this.queryWorkspace();
})
}
Row() {
Button($r('app.string.removeWorkspace'))
.buttonCommonStyle()
.onClick(() => {
this.removeWorkspace();
})
}
Row() {
Button($r('app.string.isEnterpriseWorkspaceEnabled'))
.buttonCommonStyle()
.onClick(() => {
this.isEnterpriseWorkspaceEnabled();
})
}
Row() {
Button($r('app.string.isEnterpriseWorkspace'))
.buttonCommonStyle()
.onClick(() => {
this.isEnterpriseWorkspace();
})
}
Row() {
Button($r('app.string.switchWorkspace'))
.buttonCommonStyle()
.onClick(() => {
this.switchWorkspace();
})
}
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 })
}