鸿蒙Next如何监听通知设置及通知打开回调

在鸿蒙Next开发中,如何监听用户修改通知设置的操作?当用户打开通知时,系统是否会提供回调接口?具体需要实现哪些监听方法或注册哪些事件?希望能提供示例代码或关键API说明。

2 回复

鸿蒙Next监听通知?简单!用NotificationSubscriber订阅通知事件,在onNotificationPosted里处理新通知,onNotificationRemoved处理删除。记得在config.json里声明权限,别让系统把你当流氓App!代码一写,通知一来,手机就蹦迪~

更多关于鸿蒙Next如何监听通知设置及通知打开回调的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在鸿蒙Next中,可以通过NotificationHelperNotificationSubscriber来监听通知设置变化及通知打开事件。以下是具体实现方法:

1. 监听通知设置变化

import notificationManager from '@ohos.notificationManager';
import common from '@ohos.app.ability.common';

// 监听通知开关状态变化
async function subscribeNotificationEnable() {
  try {
    await notificationManager.subscribeNotification({
      onEnableNotificationChanged: (enable: boolean) => {
        console.log(`Notification enabled status changed: ${enable}`);
        // 处理通知开关状态变化
        if (enable) {
          // 通知已开启
        } else {
          // 通知已关闭
        }
      }
    });
  } catch (error) {
    console.error(`Subscribe notification enable failed, error: ${error}`);
  }
}

2. 监听通知打开回调

import notificationManager from '@ohos.notificationManager';
import { BusinessError } from '@ohos.base';

// 订阅通知
async function subscribeNotification() {
  try {
    await notificationManager.subscribeNotification({
      onNotificationOpened: (err: BusinessError, data: notificationManager.NotificationRequest) => {
        if (err) {
          console.error(`Subscribe notification failed, error: ${err}`);
          return;
        }
        console.log('Notification opened successfully');
        // 处理通知打开事件
        console.log(`Notification content: ${data.content}`);
        console.log(`Notification id: ${data.id}`);
        
        // 可以在这里处理特定的业务逻辑
        handleNotificationOpened(data);
      }
    });
  } catch (error) {
    console.error(`Subscribe notification failed, error: ${error}`);
  }
}

// 处理通知打开的具体逻辑
function handleNotificationOpened(notification: notificationManager.NotificationRequest) {
  // 根据通知内容执行相应操作
  if (notification.content?.text?.includes('特定关键词')) {
    // 跳转到特定页面或执行特定操作
  }
}

3. 取消订阅

// 取消订阅通知
async function unsubscribeNotification() {
  try {
    await notificationManager.unsubscribeNotification();
  } catch (error) {
    console.error(`Unsubscribe notification failed, error: ${error}`);
  }
}

4. 在Ability中使用

export default class EntryAbility extends Ability {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 在Ability创建时订阅通知
    subscribeNotification();
    subscribeNotificationEnable();
  }

  onDestroy(): void {
    // 在Ability销毁时取消订阅
    unsubscribeNotification();
  }
}

权限配置

module.json5中添加必要权限:

{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.NOTIFICATION_CONTROLLER"
      }
    ]
  }
}

关键点说明:

  • onEnableNotificationChanged:监听系统通知总开关状态变化
  • onNotificationOpened:监听用户点击通知栏消息事件
  • 需要在合适的生命周期中订阅和取消订阅
  • 注意处理权限申请和错误情况

这样就能完整监听鸿蒙Next中的通知设置变化和通知打开回调了。

回到顶部