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

打印 上一主题 下一主题

主题 1003|帖子 1003|积分 3019

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
意图通知
获取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
  1. import { NavBar } from '../component/NavBar';
  2. import { notificationManager } from '@kit.NotificationKit';
  3. import { common, wantAgent } from '@kit.AbilityKit';
  4. import { hilog } from '@kit.PerformanceAnalysisKit';
  5. import { BusinessError } from '@kit.BasicServicesKit';
  6. @Component
  7. @Entry
  8. struct DemoNotification {
  9.   @State TAG: string = '[PublishOperation]';
  10.   @State DOMAIN_NUMBER: number = 0xFF00;
  11.   @State wantAgentInfo: wantAgent.WantAgentInfo = {
  12.     wants: [
  13.       {
  14.         bundleName: "com.example.yumi",
  15.         abilityName: "EntryAbility"
  16.       }
  17.     ],
  18.     operationType: wantAgent.OperationType.START_ABILITY,
  19.     requestCode: 100
  20.   };
  21.   onPageShow(): void {
  22.     // 请求通知授权
  23.     let context = getContext(this) as common.UIAbilityContext;
  24.     notificationManager.isNotificationEnabled().then((data: boolean) => {
  25.       hilog.info(this.DOMAIN_NUMBER, this.TAG, "isNotificationEnabled success, data: " + JSON.stringify(data));
  26.       if (!data) {
  27.         notificationManager.requestEnableNotification(context).then(() => {
  28.           hilog.info(this.DOMAIN_NUMBER, this.TAG, `[ANS] requestEnableNotification success`);
  29.         }).catch((err: BusinessError) => {
  30.           if (1600004 == err.code) {
  31.             hilog.error(this.DOMAIN_NUMBER, this.TAG,
  32.               `[ANS] requestEnableNotification refused, code is ${err.code}, message is ${err.message}`);
  33.           } else {
  34.             hilog.error(this.DOMAIN_NUMBER, this.TAG,
  35.               `[ANS] requestEnableNotification failed, code is ${err.code}, message is ${err.message}`);
  36.           }
  37.         });
  38.       }
  39.     }).catch((err: BusinessError) => {
  40.       hilog.error(this.DOMAIN_NUMBER, this.TAG,
  41.         `isNotificationEnabled fail, code is ${err.code}, message is ${err.message}`);
  42.     });
  43.     // 通知角标
  44.     let badgeNumber: number = 10;
  45.     notificationManager.setBadgeNumber(badgeNumber).then(() => {
  46.       hilog.info(this.DOMAIN_NUMBER, this.TAG, `setBadgeNumber 10 success.`);
  47.       badgeNumber = 11;
  48.       notificationManager.setBadgeNumber(badgeNumber).then(() => {
  49.         hilog.info(this.DOMAIN_NUMBER, this.TAG, `setBadgeNumber 11 success.`);
  50.       });
  51.     });
  52.   }
  53.   publishNotification() {
  54.     let notificationRequest: notificationManager.NotificationRequest = {
  55.       // 描述通知的请求
  56.       id: 1, // 通知ID
  57.       content: {
  58.         // 通知内容
  59.         notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知
  60.         normal: {
  61.           // 基本类型通知内容
  62.           title: '通知内容标题',
  63.           text: '通知内容详情'
  64.         }
  65.       }
  66.     }
  67.     // addslot回调
  68.     let addSlotCallBack = (err: BusinessError): void => {
  69.       if (err) {
  70.         hilog.info(this.DOMAIN_NUMBER, this.TAG, `addSlot failed, code is ${err.code}, message is ${err.message}`);
  71.       } else {
  72.         hilog.info(this.DOMAIN_NUMBER, this.TAG, `addSlot success`);
  73.       }
  74.     }
  75.     notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION, addSlotCallBack);
  76.     notificationManager.publish(notificationRequest).then(() => { // 发布通知
  77.       console.info('publish success');
  78.     }).catch((err: Error) => {
  79.       console.error(`publish failed,message is ${err}`);
  80.     });
  81.   }
  82.   async publishNotificationWant() {
  83.     let wantAgentInfo: wantAgent.WantAgentInfo = {
  84.       wants: [
  85.         {
  86.           bundleName: "com.example.yumi", // 自己应用的bundleName
  87.           abilityName: "EntryAbility",
  88.           parameters: { page: 'view/Car' } // 自己点击通知需要跳转的页面
  89.         }
  90.       ],
  91.       operationType: wantAgent.OperationType.START_ABILITIES,
  92.       requestCode: 1,
  93.     }
  94.     const wantAgentObj = await wantAgent.getWantAgent(wantAgentInfo)
  95.     await notificationManager.publish({
  96.       content: {
  97.         notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,
  98.         normal: {
  99.           title: "测试标题",
  100.           text: "测试内容",
  101.         }
  102.       },
  103.       id: 1,
  104.       wantAgent: wantAgentObj
  105.     })
  106.   }
  107.   build() {
  108.     Column() {
  109.       NavBar({ title: '通知' })
  110.       Button('发送文本类型通知')
  111.         .onClick(() => {
  112.           this.publishNotification()
  113.         })
  114.       Button('发送通知-为通知添加行为意图')
  115.         .onClick(() => {
  116.           this.publishNotificationWant()
  117.         })
  118.     }
  119.   }
  120. }
复制代码
  1. import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
  2. import { hilog } from '@kit.PerformanceAnalysisKit';
  3. import { router, Router, window } from '@kit.ArkUI';
  4. import { DialogHelper } from '@pura/harmony-dialog';
  5. import { AppUtil } from '@pura/harmony-utils'
  6. export default class EntryAbility extends UIAbility {
  7.   onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  8.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
  9.     AppUtil.init(this.context)
  10.   }
  11.   onDestroy(): void {
  12.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
  13.   }
  14.   onWindowStageCreate(windowStage: window.WindowStage): void {
  15.     // Main window is created, set main page for this ability
  16.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  17.     windowStage.loadContent('pages/Splash')
  18.   }
  19.   onWindowStageDestroy(): void {
  20.     // Main window is destroyed, release UI related resources
  21.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
  22.   }
  23.   onForeground(): void {
  24.     // Ability has brought to foreground
  25.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
  26.   }
  27.   onBackground(): void {
  28.     // Ability has back to background
  29.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
  30.   }
  31.   onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam): void {
  32.     hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onNewWant');
  33.     //点击Notification通知并打开App的具体页面
  34.     let page = want?.parameters?.page  as string
  35.     router.pushUrl({
  36.       url: page
  37.     })
  38.     console.log('want参数'+want?.parameters?.page)
  39.   }
  40. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表