# @ohos.bundle.bundleMonitor (bundleMonitor) (System API) The module provides APIs for listens for bundle installation, uninstall, and updates. > **NOTE** > > The initial APIs of this module are supported since API version 9. Newly added APIs will be marked with a superscript to indicate their earliest API version. > > The APIs provided by this module are system APIs. ## Modules to Import ```ts import bundleMonitor from '@ohos.bundle.bundleMonitor'; ``` ## BundleChangedInfo **System capability**: SystemCapability.BundleManager.BundleFramework.Core **System API**: This is a system API. | Name | Type | Read-Only| Optional| Description | | ---------- | ------ | ---- | ---- | -------------------------- | | bundleName | string | Yes | No | Name of the bundle whose status changes.| | userId | number | Yes | No | ID of the user for whom the bundle status changes. You can obtain the ID by calling [getOsAccountLocalId](../apis-basic-services-kit/js-apis-osAccount.md#getosaccountlocalid9). | | appIndex12+ | number | Yes | No | Index of the application clone whose status changes. | ## BundleChangedEvent Enumerates the types of events to listen for. **System capability**: SystemCapability.BundleManager.BundleFramework.Core **System API**: This is a system API. | Name | Description | | ---------- | --------------- | | add | Bundle installation event. | | update | Bundle update event. | | remove | Bundle uninstall event. | ## bundleMonitor.on on(type: BundleChangedEvent, callback: Callback\): void Subscribes to bundle installation, uninstall, and update events. >**NOTE** > >This API must be used together with [bundleMonitor.off](#bundlemonitoroff). When the lifecycle of a component, page, or application ends, use [bundleMonitor.off](#bundlemonitoroff) to unsubscribe from the bundle installation, uninstall, and update events. **Required permissions**: ohos.permission.LISTEN_BUNDLE_CHANGE **System API**: This is a system API. **System capability**: SystemCapability.BundleManager.BundleFramework.Core **Parameters** | Name | Type | Mandatory| Description | | ---------------------------- | -------- | ---- | ------------------ | | type| [BundleChangedEvent](js-apis-bundleMonitor-sys.md#bundlechangedevent)| Yes | Type of the event to subscribe to.| | callback | callback\| Yes | [Callback function](../apis-basic-services-kit/js-apis-base.md#asynccallback) used for the subscription.| **Error codes** For details about the error codes, see [Universal Error Codes](../errorcode-universal.md). | ID| Error Message | | -------- | --------------------------------------| | 201 | Verify permission denied. | | 202 | Permission denied, non-system app called system api. | | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.| **Example** ```ts import bundleMonitor from '@ohos.bundle.bundleMonitor'; import { BusinessError } from '@ohos.base'; let callbackFun = (bundleChangeInfo: bundleMonitor.BundleChangedInfo) => { console.info(`bundleName : ${bundleChangeInfo.bundleName} userId : ${bundleChangeInfo.userId}`); }; try { bundleMonitor.on('add', callbackFun); } catch (errData) { let message = (errData as BusinessError).message; let errCode = (errData as BusinessError).code; console.error(`errData is errCode:${errCode} message:${message}`); } ``` ## bundleMonitor.off off(type: BundleChangedEvent, callback?: Callback\): void Unsubscribes from bundle installation, uninstall, and update events. **Required permissions**: ohos.permission.LISTEN_BUNDLE_CHANGE **System API**: This is a system API. **System capability**: SystemCapability.BundleManager.BundleFramework.Core **Parameters** | Name | Type | Mandatory| Description | | ---------------------------- | -------- | ---- | ---------------------------------------------------------- | | type| [BundleChangedEvent](js-apis-bundleMonitor-sys.md#bundlechangedevent)| Yes | Type of the event to unsubscribe from. | | callback | callback\| No | [Callback function](../apis-basic-services-kit/js-apis-base.md#asynccallback) used for the unsubscription. If this parameter is left empty, all callbacks of the current event are unsubscribed from.| **Error codes** For details about the error codes, see [Universal Error Codes](../errorcode-universal.md). | ID| Error Message | | -------- | --------------------------------------| | 201 | Verify permission denied. | | 202 | Permission denied, non-system app called system api. | | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.| **Example** ```ts import bundleMonitor from '@ohos.bundle.bundleMonitor'; import { BusinessError } from '@ohos.base'; // The variable in this API must be the same as that in bundleMonitor.on. Otherwise, the callback cannot be unsubscribed from. let callbackFun = (bundleChangeInfo: bundleMonitor.BundleChangedInfo) => { console.info(`bundleName : ${bundleChangeInfo.bundleName} userId : ${bundleChangeInfo.userId}`); }; try { bundleMonitor.off('add', callbackFun); } catch (errData) { let message = (errData as BusinessError).message; let errCode = (errData as BusinessError).code; console.error(`errData is errCode:${errCode} message:${message}`); } ```