鸿蒙-点击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)
}
}