当前位置: 首页 > article >正文

鸿蒙-点击Notification通知并打开App的具体页面

意图通知
获取router事件中传递参数并跳转
目前点击通知消息打开应用的指定页面,通过为通知添加行为意图的方式。也就是在wants的parameters中设置自定义参数,然后在UIAbility的onNewWant或者onCreate方法中 解析配置的自定义参数信息判断跳转不同页面,参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/notification-with-wantagent-V5
在UIAbility根据传递的params不同,选择拉起不同的页面可参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-ui-widget-event-router-V5

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


@Component
@Entry
struct DemoNotification {
  @State TAG: string = '[PublishOperation]';
  @State DOMAIN_NUMBER: number = 0xFF00;
  @State wantAgentInfo: wantAgent.WantAgentInfo = {
    wants: [
      {
        bundleName: "com.example.yumi",
        abilityName: "EntryAbility"
      }
    ],
    operationType: wantAgent.OperationType.START_ABILITY,
    requestCode: 100
  };

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

    // 通知角标
    let badgeNumber: number = 10;
    notificationManager.setBadgeNumber(badgeNumber).then(() => {
      hilog.info(this.DOMAIN_NUMBER, this.TAG, `setBadgeNumber 10 success.`);
      badgeNumber = 11;
      notificationManager.setBadgeNumber(badgeNumber).then(() => {
        hilog.info(this.DOMAIN_NUMBER, this.TAG, `setBadgeNumber 11 success.`);
      });
    });
  }

  publishNotification() {
    let notificationRequest: notificationManager.NotificationRequest = {
      // 描述通知的请求
      id: 1, // 通知ID
      content: {
        // 通知内容
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
        normal: {
          // 基本类型通知内容
          title: '通知内容标题',
          text: '通知内容详情'
        }
      }
    }
    // addslot回调
    let addSlotCallBack = (err: BusinessError): void => {
      if (err) {
        hilog.info(this.DOMAIN_NUMBER, this.TAG, `addSlot failed, code is ${err.code}, message is ${err.message}`);
      } else {
        hilog.info(this.DOMAIN_NUMBER, this.TAG, `addSlot success`);
      }
    }
    notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION, addSlotCallBack);
    notificationManager.publish(notificationRequest).then(() => { // 发布通知
      console.info('publish success');
    }).catch((err: Error) => {
      console.error(`publish failed,message is ${err}`);
    });
  }

  async publishNotificationWant() {
    let wantAgentInfo: wantAgent.WantAgentInfo = {
      wants: [
        {
          bundleName: "com.example.yumi", // 自己应用的bundleName
          abilityName: "EntryAbility",
          parameters: { page: 'view/Car' } // 自己点击通知需要跳转的页面
        }
      ],
      operationType: wantAgent.OperationType.START_ABILITIES,
      requestCode: 1,
    }
    const wantAgentObj = await wantAgent.getWantAgent(wantAgentInfo)
    await notificationManager.publish({
      content: {
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
        normal: {
          title: "测试标题",
          text: "测试内容",
        }
      },
      id: 1,
      wantAgent: wantAgentObj
    })
  }

  build() {
    Column() {
      NavBar({ title: '通知' })
      Button('发送文本类型通知')
        .onClick(() => {
          this.publishNotification()
        })
      Button('发送通知-为通知添加行为意图')
        .onClick(() => {
          this.publishNotificationWant()
        })
    }
  }
}
import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { router, Router, window } from '@kit.ArkUI';
import { DialogHelper } from '@pura/harmony-dialog';
import { AppUtil } from '@pura/harmony-utils'

export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
    AppUtil.init(this.context)
  }

  onDestroy(): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  }

  onWindowStageCreate(windowStage: window.WindowStage): void {
    // Main window is created, set main page for this ability
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
    windowStage.loadContent('pages/Splash')
  }

  onWindowStageDestroy(): void {
    // Main window is destroyed, release UI related resources
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  }

  onForeground(): void {
    // Ability has brought to foreground
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  }

  onBackground(): void {
    // Ability has back to background
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  }

  onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onNewWant');
    //点击Notification通知并打开App的具体页面
    let page = want?.parameters?.page  as string
    router.pushUrl({
      url: page
    })
    console.log('want参数'+want?.parameters?.page)
  }
}


http://www.kler.cn/a/506526.html

相关文章:

  • 前端web
  • RPC 简介
  • 【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展
  • 计算机网络 (45)动态主机配置协议DHCP
  • Android Studio历史版本包加载不出来,怎么办?
  • 嵌入式系统Linux实时化(四)Xenomai应用开发测试
  • 动态规划汇总1
  • 服务器数据恢复—Zfs文件系统数据恢复案例
  • mongDB学习笔记
  • 基于Linux系统指令使用详细解析
  • 浅谈云计算18 | OpenStack架构概述
  • 自动化仓储管理与库存控制
  • 《零基础Go语言算法实战》【题目 4-11】在不使用任何内置散列表库的情况下设计一个 HashSet
  • 蓝桥杯刷题第三天——排序
  • 如何有效防止和解决IP劫持问题
  • Linux中常用命令详解
  • STM32 FreeRTOS消息队列
  • 使用DAS的导出和导入功能迁移GaussDB数据
  • 【JAVA】-JDK
  • Windows Subsystem for Linux (WSL) 中安装 Redis
  • openharmony设备测试XTS测评用例开发指导
  • 学术内容写作ChatGPT提示词分享
  • 【Qt 常用控件】按钮类(QPushButton、QRadioButton、QCheckBox)
  • 基于 requests 依赖包的 Python 爬虫实战
  • Linux第一课:LinuxC基础 学习记录day11
  • Docker 镜像制作原理 做一个自己的docker镜像