1/* 2 * Copyright (c) 2025 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16import { AsyncCallback, BusinessError } from '@ohos.base'; 17import { Log } from '../utils/utils'; 18import commonEventManager from '@ohos.commonEventManager'; 19 20export class EventObserver { 21 private events: string[]; 22 private subscriber: commonEventManager.CommonEventSubscriber | undefined = undefined; 23 private subscribeInfo: commonEventManager.CommonEventSubscribeInfo = { 24 events: [] 25 }; 26 27 constructor(events: string[]) { 28 this.events = events; 29 } 30 31 /** 32 * 注册监听资源变化事件 33 * @param callback 34 * return 35 */ 36 public register(callback: AsyncCallback<commonEventManager.CommonEventData>): void { 37 if (callback === undefined || callback === null) { 38 Log.error(`callback is undefined.`); 39 return; 40 } 41 try { 42 if (this.events === undefined || !this.events.length) { 43 Log.error(`event is undefined.`); 44 return; 45 } 46 this.subscribeInfo.events = this.events; 47 commonEventManager.createSubscriber(this.subscribeInfo).then(subscriber => { 48 if (subscriber === undefined) { 49 Log.error(`subscriber is undefined.`); 50 return; 51 } 52 this.subscriber = subscriber; 53 try { 54 commonEventManager.subscribe(this.subscriber, callback); 55 Log.info(`subscribe success.`); 56 } catch (err) { 57 Log.error(`subscribe faild, code: ${err.code}, message: ${err.message}.`); 58 } 59 }).catch((err: BusinessError) => { 60 Log.error(`createSubscriber faild, code: ${err.code}, message: ${err.message}.`); 61 }) 62 } catch (error) { 63 Log.error(`create subscriber faild, code: ${error.code}, message: ${error.message}.`); 64 } 65 } 66 67 /** 68 * 注销监听 69 * return 70 */ 71 public unregister(): void { 72 if (this.subscriber === undefined) { 73 Log.error(`subscriber is undefined.`); 74 return; 75 } 76 try { 77 commonEventManager.unsubscribe(this.subscriber, err => { 78 if (err) { 79 Log.error(`unsubscriber faild, code: ${err.code}, message: ${err.message}.`); 80 } else { 81 Log.info(`unsubscriber success.`); 82 } 83 }) 84 } catch (error) { 85 Log.error(`unsubscriber faild, code: ${error.code}, message: ${error.message}.`); 86 } 87 } 88 89}