# EnterpriseAdminExtensionContext

EnterpriseAdminExtensionContext是EnterpriseAdminExtensionAbility的上下文环境，继承自ExtensionContext。

每个EnterpriseAdminExtensionAbility组件实例化时，系统都会自动创建对应的EnterpriseAdminExtensionContext。开发者可以通过EnterpriseAdminExtensionContext获取应用的沙箱路径、启动其他的组件。该上下文环境只能在当前EnterpriseAdminExtensionAbility中使用，不能传递到其他组件中使用。

本模块首批接口从API version 23 开始支持。后续版本的新增接口，采用上角标单独标记接口的起始版本。

本模块接口仅可在Stage模型下使用。

本模块接口仅对设备管理应用开放，且调用接口前需激活设备管理应用，具体请参考MDM Kit开发指南。

#### 导入模块

```
import { common } from '@kit.MDMKit';
```

#### EnterpriseAdminExtensionContext

EnterpriseAdminExtensionAbility的上下文，继承自ExtensionContext。

#### startAbilityByAdmin

startAbilityByAdmin(admin: Want, want: Want): Promise<void>

在EnterpriseAdminExtensionAbility组件中直接启动另外一个组件（页面没有弹窗提醒），目前支持UIAbility，AppServiceExtensionAbility。使用Promise异步回调。

仅支持启动三方应用组件，不支持系统应用组件。

被启动的组件需要对外可见，即module.json5中的exported字段需要为true。

不支持隐式Want启动。

如果被启动的UIAbility有权限保护，需要额外申请对应的权限。

**需要权限**：ohos.permission.ENTERPRISE\_START\_ABILITIES

**系统能力**：SystemCapability.Customization.EnterpriseDeviceManager

**模型约束**：此接口仅可在Stage模型下使用。

**参数：**

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| admin | Want | 是 | 企业设备管理扩展组件。Want中必须包含企业设备管理扩展能力的abilityName和所在应用的bundleName。 |
| want | Want | 是 | 启动组件的必要信息，Want中必须包含被启动组件的abilityName和所在应用的bundleName。 |

**返回值：**

| 类型 | 说明 |
| --- | --- |
| Promise<void> | 无返回结果的Promise对象。当启动组件失败时，会抛出错误对象。 |

**错误码**：

以下错误码的详细介绍请参见企业设备管理错误码和通用错误码。

| 错误码ID | 错误信息 |
| --- | --- |
| 9200001 | The application is not an administrator application of the device. |
| 9200014 | Failed to start the ability. |
| 9200015 | The ability does not exist. |
| 201 | Permission verification failed. The application does not have the permission required to call the API. |
| 801 | Capability not supported. Failed to call the API due to limited device capabilities. |

**示例：**

需要在module.json5中配置被启动组件的信息。permissions为可选字段，需根据实际情况进行替换或者不填。

```
"abilities": [
  {
    "name": "MainAbility",
    "srcEntry": "./ets/MainAbility/MainAbility.ts",
    "description": "$string:MainAbility_desc",
    "icon": "$media:icon",
    "label": "$string:MainAbility_label",
    "startWindowIcon": "$media:icon",
    "startWindowBackground": "$color:white",
    "exported": true,
    "permissions": [
      "ohos.permission.START_UI_Ability"
    ]
  }
]
```

调用方应用需要在module.json5中申请对应的权限。启动其他应用中的组件时，调用方应用必须获取该组件所要求的权限。

```
"requestPermissions": [
  {
    "name": "ohos.permission.START_UI_ABILITY"
  },
  {
    "name": "ohos.permission.ENTERPRISE_START_ABILITIES"
  }
]
```

```
import { EnterpriseAdminExtensionAbility } from '@kit.MDMKit';
import { preferences } from '@kit.ArkData';
import { Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';

/**
 * 企业设备管理扩展能力组件
 */
export default class EnterpriseAdminAbility extends EnterpriseAdminExtensionAbility {
  onAdminEnabled() {
    // 需根据实际情况进行替换
    let admin: Want = {
      bundleName: 'com.example.myapplication',
      abilityName: 'EnterpriseAdminAbility',
    };
    // 需根据实际情况进行替换
    let want: Want = {
      bundleName: 'com.example.myotherapplication',
      abilityName: 'MainAbility'
    };
    this.context.startAbilityByAdmin(admin, want).catch((err: BusinessError) => {
      console.error(`Failed to start an ability. Code: ${err.code}, message: ${err.message}`);
    });
    
    // 通过context获取到应用文件路径
    let preferencesDir = this.context.preferencesDir;
    console.info(`preferencesDir: ` + preferencesDir);
    
    // 通过context获取到preferences数据
    let options: preferences.Options = {
      // 需根据实际情况进行替换
      name: "key",
    };
    try {
      let preference = preferences.getPreferencesSync(this.context, options);
      // 需根据实际情况进行替换
      preference.putSync("key", "value");
      preference.flushSync();
    
      // 需根据实际情况进行替换
      let value: string = preference.getSync('key', 'default') as string;
      console.info(`get preferences value: ${value}`);
    } catch (error) {
      console.error('get preference fail');
    }
  }
}
```