HarmonyOS 鸿蒙Next Notification Kit用户通知服务中如何监听用户点击事件

在HarmonyOS 鸿蒙Next Notification Kit用户通知服务中可以很方便的实现通知,但是如何监听用户点击事件呢

第一步 HarmonyOS 鸿蒙Next实现通知要请求通知授权

import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { common } from '@kit.AbilityKit';
const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;



requestNotification(){
    let context = getContext(this) as common.UIAbilityContext;
    notificationManager.isNotificationEnabled().then((data: boolean) => {
      hilog.info(DOMAIN_NUMBER, TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));
      if(!data){
        notificationManager.requestEnableNotification(context).then(() => {
          hilog.info(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification success`);
        }).catch((err : BusinessError) => {
          if(1600004 == err.code){
            hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);
          } else {
            hilog.error(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);
          }
        });
      }
    }).catch((err : BusinessError) => {
      hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);
    });
  }

第二步 HarmonyOS 鸿蒙Next实现文本通知、进度条通知

import { notificationManager } from '@kit.NotificationKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { common, WantAgent } from '@kit.AbilityKit';
import { wantAgent } from '@kit.AbilityKit';

const TAG: string = '[PublishOperation]';
const DOMAIN_NUMBER: number = 0xFF00;

// 声明wantAgentObj变量
let wantAgentObj:WantAgent;

@Builder
export function NotificationPageBuilder() {
  NotificationPage()
}

@Component
struct NotificationPage {
  pathStack: NavPathStack = new NavPathStack();

  aboutToAppear(): void {
    this.requestNotification();
    this.createWantAgent(); // 初始化WantAgent
  }

  // 创建WantAgent用于通知点击跳转
  createWantAgent() {
    let context = getContext(this) as common.UIAbilityContext;

    // 定义WantAgent参数
    let wantAgentInfo: wantAgent.WantAgentInfo = {
      wants: [
        {
          bundleName: context.abilityInfo.bundleName,
          abilityName: context.abilityInfo.name,
          // 可以添加额外的参数
          parameters: {
            key: 'value111'
          }
        }
      ],
      operationType: wantAgent.OperationType.START_ABILITY,
      requestCode: 0,
      wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
    };

    // 创建WantAgent
    wantAgent.getWantAgent(wantAgentInfo).then((agent:WantAgent) => {
      wantAgentObj = agent;
      hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in getting wantAgent.'+JSON.stringify(wantAgentObj));
    }).catch((err: BusinessError) => {
      hilog.error(DOMAIN_NUMBER, TAG, `Failed to get wantAgent. Code is ${err.code}, message is ${err.message}`);
    });
  }

  requestNotification() {
    let context = getContext(this) as common.UIAbilityContext;
    notificationManager.isNotificationEnabled().then((data: boolean) => {
      hilog.info(DOMAIN_NUMBER, TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));
      if (!data) {
        notificationManager.requestEnableNotification(context).then(() => {
          hilog.info(DOMAIN_NUMBER, TAG, `[ANS] requestEnableNotification success`);
        }).catch((err: BusinessError) => {
          if (1600004 == err.code) {
            hilog.error(DOMAIN_NUMBER, TAG,
              `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);
          } else {
            hilog.error(DOMAIN_NUMBER, TAG,
              `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);
          }
        });
      }
    }).catch((err: BusinessError) => {
      hilog.error(DOMAIN_NUMBER, TAG, `isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);
    });
  }

  // 修改后的发布文本通知方法,添加WantAgent
  publishTextNotification = () => {
    let notificationRequest: notificationManager.NotificationRequest = {
      id: 1,
      content: {
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
        normal: {
          title: 'test_title',
          text: 'test_text',
          additionalText: 'test_additionalText',
        }
      },
      wantAgent: wantAgentObj // 添加WantAgent
    };

    notificationManager.publish(notificationRequest, (err: BusinessError) => {
      if (err) {
        hilog.error(DOMAIN_NUMBER, TAG,
          `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);
        return;
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
    });
  }

  // 修改后的进度通知方法,添加WantAgent
  publishProgressNotification = (progressValue: number) => {
    let notificationRequest: notificationManager.NotificationRequest = {
      id: 5,
      content: {
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
        normal: {
          title: 'test_title',
          text: 'test_text',
          additionalText: 'test_additionalText'
        }
      },
      template: {
        name: 'downloadTemplate',
        data: { title: 'File Title', fileName: 'music.mp4', progressValue: progressValue }
      },
      wantAgent: wantAgentObj // 添加WantAgent
    }

    notificationManager.publish(notificationRequest, (err: BusinessError) => {
      if (err) {
        hilog.error(DOMAIN_NUMBER, TAG,
          `Failed to publish notification. Code is ${err.code}, message is ${err.message}`);
        return;
      }
      hilog.info(DOMAIN_NUMBER, TAG, 'Succeeded in publishing notification.');
    });
  }

  build() {
    NavDestination() {
      Column() {
        Button() {
          Text("publish Text Notification").fontColor(Color.White)
        }.width("80%")
        .height(40)
        .onClick(this.publishTextNotification).margin({
          top: 20
        })

        Button() {
          Text("publishProgressNotification Notification").fontColor(Color.White)
        }.width("80%")
        .height(40)
        .onClick(() => {
          let num = 10
          let timer = setInterval(() => {
            num += 10
            this.publishProgressNotification(num)
            if (num == 100) {
              clearInterval(timer)
            }
          }, 500)
        }).margin({
          top: 20
        })
      }
    }
    .width('100%')
    .height('100%')
    .title('NotificationPage')
    .onReady((context: NavDestinationContext) => {
      this.pathStack = context.pathStack
    })
  }
}

第三步、HarmonyOS 鸿蒙Next 监听用户点击事件 获取通知传值

  onNewWant(want: Want): void {
    // 获取消息中传递的data数据
    const data = want.parameters;
    console.log("want"+JSON.stringify(data));
    hilog.info(0x0000, 'testTag', 'Succeeded in getting message data');
    // 根据实际业务场景对data进行处理
  }

更多关于HarmonyOS 鸿蒙Next Notification Kit用户通知服务中如何监听用户点击事件的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next Notification Kit用户通知服务中如何监听用户点击事件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


提示 HarmonyOS 鸿蒙Next 监听用户点击事件需要放在入口中EntryAbility.ets中

  onNewWant(want: Want): void {
    // 获取消息中传递的data数据
    const data = want.parameters;
    console.log("want"+JSON.stringify(data));
    hilog.info(0x0000, 'testTag', 'Succeeded in getting message data');
    // 根据实际业务场景对data进行处理
  }
回到顶部