订阅通知(仅对系统应用开放)


订阅通知(仅对系统应用开放)

应用需要接收通知,必须先发起订阅,通知子系统提供两种接口:订阅所有应用发布的通知和订阅某些应用发布的通知。

系统提供NotificationSubscriber对象,用于提供订阅成功、通知接收、通知取消、订阅取消等回调接口,将变化信息回调给订阅者。

接口说明

通知订阅主要接口如下。详细接口介绍请参见API参考

表1 通知订阅接口介绍

接口名 描述
subscribe(subscriber: NotificationSubscriber, info: NotificationSubscribeInfo, callback: AsyncCallback<void>): void 订阅指定应用通知。
subscribe(subscriber: NotificationSubscriber, callback: AsyncCallback<void>): void 订阅所有通知。

表2 通知订阅回调接口介绍

接口名 描述
onConsume?:(data: SubscribeCallbackData) => void 通知回调。
onCancel?:(data: SubscribeCallbackData) => void 通知取消回调。
onUpdate?:(data: NotificationSortingMap) => void 通知排序更新回调。
onConnect?😦) => void; 订阅成功回调。
onDisconnect?😦) => void; 取消订阅回调。
onDestroy?😦) => void 与通知子系统断开回调。
onDoNotDisturbDateChange?:(mode: notification.DoNotDisturbDate) => void 免打扰时间选项变更回调。
onEnabledNotificationChanged?:(callbackData: EnabledNotificationCallbackData) => void 通知开关变更回调。

开发步骤

  1. 申请ohos.permission.NOTIFICATION_CONTROLLER权限,配置方式请参见访问控制授权申请

  2. 导入通知订阅模块。

    import notificationSubscribe from '@ohos.notificationSubscribe';
    
    1
  3. 创建订阅者对象。

    let subscriber = {
        onConsume: function (data) {
            let req = data.request;
            console.info('[ANS] onConsume callback req.id: ' + req.id);
        },
        onCancel: function (data) {
            let req = data.request;
            console.info('[ANS] onCancel callback req.id: : ' + req.id);
        },
        onUpdate: function (data) {
            console.info('[ANS] onUpdate in test');
        },
        onConnect: function () {
            console.info('[ANS] onConnect in test');
        },
        onDisconnect: function () {
            console.info('[ANS] onDisConnect in test');
        },
        onDestroy: function () {
            console.info('[ANS] onDestroy in test');
        },
    };
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
  4. 发起通知订阅。

    notificationSubscribe.subscribe(subscriber, (err, data) => { // callback形式调用异步接口
      if (err) {
        console.error(`[ANS] subscribe failed, code is ${err.code}, message is ${err.message}`);
        return;
      }
      console.info(`[ANS] subscribeTest success : + ${data}`);
    });
    
    1
    2
    3
    4
    5
    6
    7