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 回复