借助该模块,您可以从应用的基本模块中分离特定功能和资源,并将其包含在子模块的包中。用户在使用应用过程中,可以动态下载子模块包。该模块包含判断模块是否安装、请求按需加载任务、监听模块下载进度、流量提醒弹窗、取消按需加载任务等功能。
调用接口需捕获异常。
起始版本: 4.1.0(11)
当前模块的安装信息。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| moduleName | string | 是 | 否 | 模块名称。 |
| moduleType | bundleManager.ModuleType | 是 | 是 | 模块类型。 说明: 当installStatus=1时,moduleType默认返回0(UNKNOWN)。 |
| installStatus | InstallStatus | 是 | 否 | 模块安装结果。 |
请求、监听/注销监听接口,接口调用结果。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
| 名称 | 类型 | 只读 | 可选 | 说明 |
|---|---|---|---|---|
| code | RequestErrorCode | 是 | 否 | 接口调用结果码。 |
| taskStatus | TaskStatus | 是 | 否 | 按需下载任务状态码。 |
| taskId | string | 是 | 是 | 按需下载任务taskId,默认值为'0'。 |
| desc | string | 是 | 否 | 接口调用结果描述,默认值为“”。 |
| modules | string[] | 是 | 是 | 下载任务中的模块名列表,默认值为[]。 |
| totalSize | number | 是 | 是 | 下载的总模块大小(字节),默认值为0。 |
| downloadedSize | number | 是 | 是 | 已下载大小(字节),默认值为0。 |
安装结果状态码类型的枚举。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
| 名称 | 值 | 说明 |
|---|---|---|
| INSTALLED | 0 | 模块已安装。 |
| NOT_INSTALLED | 1 | 模块未安装。 |
添加模块、取消下载、流量提醒弹窗接口,接口调用结果码类型的枚举。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
| 名称 | 值 | 说明 |
|---|---|---|
| SUCCESS | 0 | 成功。 |
| FAILURE | 1 | 失败。 |
请求、监听/注销监听接口,接口调用结果码类型的枚举。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
| 名称 | 值 | 说明 |
|---|---|---|
| MODULE_DEBUG_FILES_SIZE_OVER_LIMIT | -10 | 单次请求所有模块调试文件大小总和超过8G。 起始版本: 5.0.2(14) |
| MODULE_DEBUG_FILES_NOT_EXIST | -9 | 模块调试文件不存在。 起始版本: 5.0.2(14) |
| MODULE_ALREADY_EXISTS | -8 | 模块已存在。 |
| MODULE_UNAVAILABLE | -7 | 要下载的模块不存在或者模块不适配该设备。 |
| INVALID_REQUEST | -6 | 该请求无效,请求中包含的信息不准确。 |
| NETWORK_ERROR | -5 | 网络异常,请求失败。 |
| INVOKER_VERIFICATION_FAILED | -4 | 调用者信息异常。 |
| FOREGROUND_REQUIRED | -3 | 仅允许前台时请求按需加载。 |
| ACTIVE_SESSION_LIMIT_EXCEEDED | -2 | 请求遭到拒绝,因为当前至少有一个请求正在下载。 |
| FAILURE | -1 | 失败。 |
| SUCCESS | 0 | 成功。 |
| DOWNLOAD_WAIT_WIFI | 1 | 当前使用的是流量,开发者需要调用showCellularDataConfirmation接口,提醒用户确认是否使用流量下载。 |
请求、监听/注销监听接口,接口返回下载任务状态码类型的枚举。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
| 名称 | 值 | 说明 |
|---|---|---|
| CREATE_TASK_FAILED | -4 | 创建下载任务失败。 |
| HIGHER_VERSION_INSTALLED | -3 | 本地存在相同或者更高版本。 |
| TASK_ALREADY_EXISTS | -2 | 下载任务已存在。 |
| TASK_UNFOUND | -1 | 下载任务不存在。 |
| TASK_CREATED | 0 | 创建下载任务成功。 |
| DOWNLOADING | 1 | 下载中。 |
| DOWNLOAD_PAUSING | 2 | 暂停中。 |
| DOWNLOAD_WAITING | 3 | 等待下载中。 |
| DOWNLOAD_SUCCESSFUL | 4 | 下载成功完成。 |
| DOWNLOAD_FAILED | 5 | 下载失败。 |
| DOWNLOAD_WAIT_WIFI | 6 | Wi-Fi预约。 |
| INSTALL_WAITING | 20 | 等待安装。 |
| INSTALLING | 21 | 安装中。 |
| INSTALL_SUCCESSFUL | 22 | 安装完成。 |
| INSTALL_FAILED | 23 | 安装失败。 |
getInstalledModule(moduleName: string): InstalledModule
查询模块安装信息接口。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| moduleName | string | 是 | 需要获取的模块名。 |
返回值:
| 类型 | 说明 |
|---|---|
| InstalledModule | 当前模块的安装信息。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1006500001 | Failed to invoke the BMS. |
示例:
import { moduleInstallManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
@Entry
@Component
struct LoadInstallService {
@State allInstalledModules: string = '';
private getModuleInstanceInfo() {
try {
// 查询模块安装信息
const result: moduleInstallManager.InstalledModule = moduleInstallManager.getInstalledModule('AModulelib');
this.allInstalledModules = JSON.stringify(result);
hilog.info(0, 'InstantDownload', 'getModuleInstanceInfo success=' + this.allInstalledModules);
} catch (error) {
hilog.error(0, 'InstantDownload', `getModuleInstanceInfo error.code is ${error.code}, message is ${error.message}`);
}
}
build() {
Column() {
}
.width('100%')
.height('100%')
.padding(16)
}
} 按需加载controller的父类对象。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
按需加载请求的父类对象。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
实现按需加载的方法,提供创建按需加载请求对象能力,继承InstallProvider。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
createModuleInstallRequest(context: common.UIAbilityContext | common.ExtensionContext): ModuleInstallRequest
创建按需加载请求对象,可通过返回值设置请求参数。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| context | common.UIAbilityContext | common.ExtensionContext | 是 | 调用方应用的上下文。 |
返回值:
| 类型 | 说明 |
|---|---|
| ModuleInstallRequest | 按需下载请求对象。 |
错误码:
以下错误码的详细介绍请参见通用错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
示例:
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { moduleInstallManager } from '@kit.AppGalleryKit';
const TAG: string = 'createModuleInstallRequest';
@Entry
@Component
struct CreateModuleInstallRequest {
build() {
Column() {
Button("createModuleInstallRequest")
.onClick(() => {
try {
const myModuleInstallProvider: moduleInstallManager.ModuleInstallProvider =
new moduleInstallManager.ModuleInstallProvider();
const context: common.UIAbilityContext | common.ExtensionContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
// 创建按需加载请求对象
const myModuleInstallRequest: moduleInstallManager.ModuleInstallRequest =
myModuleInstallProvider.createModuleInstallRequest(context);
hilog.info(0, TAG, `myModuleInstallRequest: ${JSON.stringify(myModuleInstallRequest)}`);
} catch (error) {
hilog.error(0, TAG, `createModuleInstallRequest onError.code is ${error.code}, message is ${error.message}`);
}
})
.width('100%')
}
.margin(16)
.height('100%')
.justifyContent(FlexAlign.Center)
}
} 按需下载请求对象,继承InstallRequest。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
addModule(moduleName: string): ReturnCode
添加要按需加载的模块名。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| moduleName | string | 是 | 模块名。 |
返回值:
| 类型 | 说明 |
|---|---|
| ReturnCode | 接口调用结果码。 |
错误码:
以下错误码的详细介绍请参见通用错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
示例:
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { moduleInstallManager } from '@kit.AppGalleryKit';
const TAG: string = 'addModule';
@Entry
@Component
struct AddModule {
build() {
Column() {
Button("addModule")
.onClick(() => {
try {
const myModuleInstallProvider: moduleInstallManager.ModuleInstallProvider =
new moduleInstallManager.ModuleInstallProvider();
const context: common.UIAbilityContext | common.ExtensionContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
// 创建按需加载请求对象
const myModuleInstallRequest: moduleInstallManager.ModuleInstallRequest =
myModuleInstallProvider.createModuleInstallRequest(context);
// 添加要按需加载的模块名
const aResult: moduleInstallManager.ReturnCode = myModuleInstallRequest.addModule('AModule');
const bResult: moduleInstallManager.ReturnCode = myModuleInstallRequest.addModule('BModule');
hilog.info(0, TAG, 'Succeeded in getting aResult:' + aResult + ' bResult:' + bResult);
} catch (error) {
hilog.error(0, TAG, `addModule onError.code is ${error.code}, message is ${error.message}`);
}
})
.width('100%')
}
.margin(16)
.height('100%')
.justifyContent(FlexAlign.Center)
}
} fetchModules(moduleInstallRequest: ModuleInstallRequest): Promise<ModuleInstallSessionState>
按需加载请求接口,支持调试模式。使用Promise异步回调。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| moduleInstallRequest | ModuleInstallRequest | 是 | 按需加载请求对象实例。 |
返回值:
| 类型 | 说明 |
|---|---|
| Promise<ModuleInstallSessionState> | Promise对象,返回请求、监听/注销监听调用结果。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1006500004 | SA connection failed. |
| 1006500008 | Write param into container failed. |
| 1006500009 | Request to service error. |
| 1006500010 | Response from service cannot be recognized. |
示例:
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { moduleInstallManager } from '@kit.AppGalleryKit';
const TAG: string = 'fetchModules';
@Entry
@Component
struct FetchModules {
build() {
Column() {
Button("fetchModules")
.onClick(() => {
try {
const myModuleInstallProvider: moduleInstallManager.ModuleInstallProvider =
new moduleInstallManager.ModuleInstallProvider();
const context: common.UIAbilityContext | common.ExtensionContext = this.getUIContext().getHostContext() as common.UIAbilityContext;
// 创建按需加载请求对象
const myModuleInstallRequest: moduleInstallManager.ModuleInstallRequest =
myModuleInstallProvider.createModuleInstallRequest(context);
// 添加要按需加载的模块名
myModuleInstallRequest.addModule('AModule');
myModuleInstallRequest.addModule('BModule');
// 按需加载请求接口,返回请求、监听/注销监听调用结果
moduleInstallManager.fetchModules(myModuleInstallRequest)
.then((result: moduleInstallManager.ModuleInstallSessionState) => {
if (result.code === moduleInstallManager.RequestErrorCode.SUCCESS) {
hilog.info(0, TAG, 'Succeeded in fetching modules success data.' );
} else {
hilog.info(0, TAG, 'Fetching modules failed' );
}
})
} catch (error) {
hilog.error(0, TAG, `fetching modules onError.code is ${error.code}, message is ${error.message}`);
}
})
.width('100%')
}
.margin(16)
.height('100%')
.justifyContent(FlexAlign.Center)
}
} cancelTask(taskId: string): ReturnCode
取消下载任务接口。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | string | 是 | 下载任务的taskId。 |
返回值:
| 类型 | 说明 |
|---|---|
| ReturnCode | 接口调用结果码。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1006500007 | The specified service extension connect failed. |
| 1006500008 | Write param into container failed. |
| 1006500009 | Request to service error. |
| 1006500010 | Response from service cannot be recognized. |
示例:
import { moduleInstallManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
try {
// taskId 是fetchModules返回结果ModuleInstallSessionState中的taskId字段
const taskId: string = '********';
const rtnCode: moduleInstallManager.ReturnCode = moduleInstallManager.cancelTask(taskId);
hilog.info(0, 'TAG', "Succeeded in getting result:" + rtnCode);
} catch (error) {
hilog.error(0, 'TAG', `cancelTask onError.code is ${error.code}, message is ${error.message}`);
} showCellularDataConfirmation(context: common.UIAbilityContext | common.ExtensionContext,taskId: string): ReturnCode
流量提醒弹窗接口。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| context | common.UIAbilityContext | common.ExtensionContext | 是 | Context上下文,目前只支持UIAbilityContext和ExtensionContext,其中UIAbilityContext用于校验当前应用是否在前台。 |
| taskId | string | 是 | 下载任务的taskId。 |
返回值:
| 类型 | 说明 |
|---|---|
| ReturnCode | 接口调用结果码。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1006500007 | The specified service extension connect failed. |
| 1006500008 | Write param into container failed. |
| 1006500009 | Request to service error. |
| 1006500010 | Response from service cannot be recognized. |
示例:
import { common } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { moduleInstallManager } from '@kit.AppGalleryKit';
const TAG: string = 'showCellularDataConfirmation';
@Entry
@Component
struct ShowCellularDataConfirmation {
build() {
Column() {
Button("showCellularDataConfirmation")
.onClick(() => {
try {
// taskId 是fetchModules返回结果ModuleInstallSessionState中的taskId字段
const taskId: string = '********';
const context = this.getUIContext().getHostContext() as common.UIAbilityContext;
const rtnCode: moduleInstallManager.ReturnCode =
moduleInstallManager.showCellularDataConfirmation(context, taskId);
hilog.info(0, TAG, "Succeeded in getting result:" + rtnCode);
} catch (error) {
hilog.error(0, TAG, `showCellularDataConfirmation onError.code is ${error.code}, message is ${error.message}`);
}
})
.width('100%')
}
.margin(16)
.height('100%')
.justifyContent(FlexAlign.Center)
}
} on(type: 'moduleInstallStatus', callback: Callback<ModuleInstallSessionState>, timeout: number): void
监听当前应用下载任务的进度,不支持多线程调用。加载模块时,通过回调函数通知调用者。安装成功且是调试模式时,会删除安装成功模块路径下的调试文件。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 固定值"moduleInstallStatus"。 |
| callback | Callback<ModuleInstallSessionState> | 是 | 回调函数,使用Callback的方式获取结果。 |
| timeout | number | 是 | 注册监听允许的最大监听时间,单位:s,默认30分钟(即30*60s),且最大超过30分钟也是按30分钟算。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1006500002 | The interface is called repeatedly with the same input. |
| 1006500004 | SA connection failed. |
示例:
import { moduleInstallManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
try {
const timeout = 30 * 60;
moduleInstallManager.on('moduleInstallStatus', (data: moduleInstallManager.ModuleInstallSessionState) => {
// 注册监听
hilog.info(0, 'TAG', 'Succeeded in getting moduleInstallManager.on.' );
}, timeout)
} catch (error) {
hilog.error(0, 'TAG', `moduleInstallManager.on onError.code is ${error.code}, message is ${error.message}`);
} off(type: 'moduleInstallStatus', callback?: Callback<ModuleInstallSessionState>): void
取消监听当前应用下载任务的进度,不支持多线程调用。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 4.1.0(11)
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| type | string | 是 | 固定值"moduleInstallStatus"。 |
| callback | Callback<ModuleInstallSessionState> | 否 | 回调函数,使用Callback的方式获取结果。不传该参数则会取消当前应用的所有监听。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 401 | Parameter error. |
| 1006500004 | SA connection failed. |
| 1006500006 | The interface is not used together with "on". |
示例:
import { moduleInstallManager } from '@kit.AppGalleryKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
try {
moduleInstallManager.off('moduleInstallStatus', (data: moduleInstallManager.ModuleInstallSessionState) => {
// 取消监听
hilog.info(0, 'TAG', 'Succeeded in getting moduleInstallManager.off.' );
})
} catch (error) {
hilog.error(0, 'TAG', `moduleInstallManager.off onError.code is ${error.code}, message is ${error.message}`);
} pauseTask(taskId: string): ReturnCode
暂停下载任务。
模型约束: 此接口仅可在Stage模型下使用。
系统能力: SystemCapability.AppGalleryService.Distribution.OnDemandInstall
起始版本: 26.0.0
参数:
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
| taskId | string | 是 | 下载任务的taskId。 |
返回值:
| 类型 | 说明 |
|---|---|
| ReturnCode | 接口调用结果码。 |
错误码:
以下错误码的详细介绍请参见ArkTS API错误码。
| 错误码ID | 错误信息 |
|---|---|
| 1006500012 | Internal communication error. |
| 1006500013 | Invalid taskId. |
示例:
import { hilog } from '@kit.PerformanceAnalysisKit';
import { moduleInstallManager } from '@kit.AppGalleryKit';
const TAG: string = 'pauseTask';
@Entry
@Component
struct PauseTask {
build() {
Column() {
Button("pauseTask")
.onClick(() => {
try {
const taskId: string = '********';
// 暂停下载任务
const rtnCode: moduleInstallManager.ReturnCode = moduleInstallManager.pauseTask(taskId);
hilog.info(0, 'TAG', "Succeeded in getting result:" + rtnCode);
} catch (error) {
hilog.error(0, TAG, `pauseTask onError.code is ${error.code}, message is ${error.message}`);
}
})
.width('100%')
}
.margin(16)
.height('100%')
.justifyContent(FlexAlign.Center)
}
}