首页 > 其他分享 >HarmonyOS:给您的应用添加通知(2)

HarmonyOS:给您的应用添加通知(2)

时间:2024-10-25 15:23:31浏览次数:1  
标签:notificationManager err 通知 publish HarmonyOS 添加 let 类型

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ 
➤GitHub地址:https://github.com/strengthen
➤原文地址:https://www.cnblogs.com/strengthen/p/18502620
➤如果链接不是为敢技术的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

1 通知介绍

通知旨在让用户以合适的方式及时获得有用的新消息,帮助用户高效地处理任务。应用可以通过通知接口发送通知消息,用户可以通过通知栏查看通知内容,也可以点击通知来打开应用,通知主要有以下使用场景:

  • 显示接收到的短消息、即时消息等。
  • 显示应用的推送消息,如广告、版本更新等。
  • 显示当前正在进行的事件,如下载等。

通知表现形式

通知会在不同场景以不同形式提示用户,例如通知在状态栏上显示为图标、在通知栏上会显示通知详细信息。重要的信息还可以使用横幅通知,浮动在界面顶部显示。

通知结构

下面以基础的文本通知为例,介绍通知的基本结构。

1. 通知小图标:表示通知的功能与类型。

2. 通知名称:应用名称或功能名称。

3. 时间:发送通知的时间,系统默认显示。

4. 展开箭头:点击标题区,展开被折叠的内容和按钮。若无折叠的内容和按钮,不显示此箭头。

5. 内容标题:描述简明概要。

6. 内容详情:描述具体内容或详情。

2 创建通知

本节将介绍几种常见类型通知的创建,在创建通知前需要先导入notificationManager模块,该模块提供通知管理的能力,包括发布、取消发布通知,创建、获取、移除通知通道等能力。

import { notificationManager } from '@kit.NotificationKit';

发布基础类型通知

基础类型通知主要应用于发送短信息、提示信息、广告推送等,支持普通文本类型、长文本类型、多行文本类型,可以通过ContentType指定通知的内容类型。下面以普通文本类型为例来介绍基础通知的发布,其它基础类型您可以查阅API。

  • 发布普通文本类型通知,需要设置ContentType类型为ContentType.NOTIFICATION_CONTENT_BASIC_TEXT。
@Entry 
@Component 
struct NotificationDemo { 
  publishNotification() { 
    let notificationRequest: notificationManager.NotificationRequest = { // 描述通知的请求 
      id: 1, // 通知ID  
      content: { // 通知内容 
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知 
        normal: { // 基本类型通知内容 
          title: '通知内容标题', 
          text: '通知内容详情' 
        } 
      } 
    } 
    notificationManager.publish(notificationRequest).then(() => { // 发布通知 
      console.info('publish success'); 
    }).catch((err: Error) => { 
      console.error(`publish failed,message is ${err}`); 
    }); 
  } 
 
  build() { 
    Column() { 
      Button('发送通知') 
        .onClick(() => { 
          this.publishNotification() 
        }) 
    } 
    .width('100%') 
  } 
}

效果图如下:

发布进度类型通知

进度条通知也是常见的通知类型,主要应用于文件下载、事务处理进度显示。目前系统模板仅支持进度条模板,效果示意如下图所示:

在发布进度类型通知前需要查询系统是否支持进度条模板。

notificationManager.isSupportTemplate('downloadTemplate').then(isSupport => {
  if (!isSupport) {
    promptAction.showToast({
      message: $r('app.string.invalid_button_toast')
    })
  }
  this.isSupport = isSupport;
});

构造进度条模板,name字段当前需要固定配置为downloadTemplate。

let template: notificationManager.NotificationTemplate = { 
  name: 'downloadTemplate', 
  data: { 
    progressValue: progress, // 当前进度值 
    progressMaxValue: 100 // 最大进度值 
  } 
} 
 
let notificationRequest: notificationManager.NotificationRequest = { 
  id: 1, 
  content: { 
    notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, 
    normal: { 
      title: '文件下载:music.mp4', 
      text: 'senTemplate', 
      additionalText: '60%' 
    } 
  }, 
   template: template   
} 
// 发布通知 
notificationManager.publish(notificationRequest).then(() => { 
  console.info(`publish success`); 
}).catch((err: Error) => { 
  console.error(`publish failed,message is ${err}`); 
})

更新通知

在发出通知后,使用您之前使用的相同通知ID,再次调用notificationManager.publish来实现通知的更新。如果之前的通知是关闭的,将会创建新通知。

移除通知

  • 通过通知ID和通知标签取消已发布的通知。

    notificationManager.cancel(notificationId)

  • 取消所有已发布的通知。

    notificationManager.cancelAll()

3 设置通知通道

通过通知通道,您可让通知有不同的表现形式,比如社交类型的通知是横幅显示的,并且有提示音,而一般的通知则不会横幅显示,您可以使用slotType来实现,设置slotType为SlotType.SOCIAL_COMMUNICATION,表示为社交类型通知。示例代码如下:

notificationManager.addSlot(notificationManager.SlotType.SOCIAL_COMMUNICATION).then(() => {
  console.info("addSlot success");
}).catch((err: Base.BusinessError) => {
  console.error(`addSlot fail: ${JSON.stringify(err)}`);
});

效果图如下:

通知通道类型主要有以下几种:

  • SlotType.SOCIAL_COMMUNICATION:社交类型,状态栏中显示通知图标,有横幅和提示音。
  • SlotType.SERVICE_INFORMATION:服务类型,状态栏中显示通知图标,没有横幅但有提示音。
  • SlotType.CONTENT_INFORMATION:内容类型,状态栏中显示通知图标,但没有横幅或提示音。
  • SlotType.OTHER_TYPES:其它类型,状态栏中不显示通知图标,且没有横幅或提示音。

4 创建通知组

将不同类型的通知分为不同的组,以便用户可以更好的管理他们。当同组的通知有多条的时候,会自动折叠起来,避免通知比较多的时候,通知界面比较杂乱,例如当通知栏里有聊天消息通知和商品推荐通知时,我们只需要通过设置字段groupName,就可以对通知进行分组,给groupName设置不同的值可以将通知分为不同的组。

您可以使用groupName来指定通知组来实现,示例代码如下:

let notifyId = 0; 
 
let chatRequest: notificationManager.NotificationRequest = {  
  id: notifyId++, 
  groupName:'ChatGroup', 
  content: { 
    //... 
   } 
 }; 
 
let productRequest: notificationManager.NotificationRequest = {  
  id: notifyId++, 
  groupName: 'ProductGroup', 
  content: { 
    //... 
   } 
 };

5 为通知添加行为意图

WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。给通知添加行为意图后,点击通知后可以拉起指定的UIAbility或者发布公共事件,您可以按照以下步骤来实现:

  1. 导入模块。
import { notificationManager } from '@kit.NotificationKit'; 
import { wantAgent, WantAgent } from '@kit.AbilityKit';
  1. 创建WantAgentInfo信息。

    场景一:拉起UIAbility。

    let wantAgentInfo = { 
      wants: [ 
        { 
          bundleName: "com.example.notification", 
          abilityName: "EntryAbility" 
        } 
      ], 
      operationType: wantAgent.OperationType.START_ABILITY, 
      requestCode: 100 
    }

    场景二:发布公共事件。

    let wantAgentInfo = { 
      wants: [ 
        { 
          action: 'event_name', // 设置事件名 
          parameters: {}, 
        } 
      ], 
      operationType: wantAgent.OperationType.SEND_COMMON_EVENT, 
      requestCode: 100, 
      wantAgentFlags: [wantAgent.WantAgentFlags.CONSTANT_FLAG], 
    }
  2. 创建WantAgent对象。
    let wantAgentObj = null;  
    wantAgent.getWantAgent(wantAgentInfo) 
      .then((data) => { 
        wantAgentObj = data; 
      }) 
      .catch((err: Error) => { 
        console.error(`get wantAgent failed because ${JSON.stringify(err)}`); 
      })
  3. 构造NotificationRequest对象。
    let notificationRequest: notificationManager.NotificationRequest = {
      id: 1, 
      content: { 
        notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, 
        normal: { 
          title: "通知标题", 
          text: "通知内容" 
        } 
      }, 
      wantAgent: wantAgentObj 
    };
  4. 发布WantAgent通知。
    notificationManager.publish(notificationRequest).then(() => { // 发布通知
      console.info("publish success"); 
    }).catch((err: Error) => { 
      console.error(`publish failed, code is ${err.code}, message is ${err.message}`); 
    });  

    用户通过点击通知栏上的通知,即可触发WantAgent的动作。

参考链接

标签:notificationManager,err,通知,publish,HarmonyOS,添加,let,类型
From: https://www.cnblogs.com/strengthen/p/18502620

相关文章

  • 构建更加丰富的页面 习题答案<HarmonyOS第一课>
    一、判断题1. Tabs组件可以通过接口传入一个TabsController,该TabsController可以控制Tabs组件进行页签切换。正确(True)错误(False)正确(True)回答正确2. WebviewController提供了变更Web组件显示内容的接口,例如可以使用loadData来加载一个网页链接地址改变Web组件的......
  • 从简单的页面开始<HarmonyOS第一课>
    一、判断题1. Button作为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮,其类型包括胶囊按钮、圆形按钮、普通按钮。正确(True)错误(False)正确(True)回答正确2. 对于包含文本元素的组件,如:Text、Span、Button、TextInput等,使用fontFamily设置字体时,参数......
  • 鸿蒙编程江湖:HarmonyOS 和 ArkTS 基本概念
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。华为鸿蒙(HarmonyOS)是华为自主研发的......
  • HarmonyOS:给您的应用添加通知(1)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18502243➤如果链接不是为敢技术的博客园地址,则可......
  • HarmonyOS:基于Web组件构建网络应用(2)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18502207➤如果链接不是为敢技术的博客园地址,则可......
  • HarmonyOS:基于Web组件构建网络应用(1)
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/18501721➤如果链接不是为敢技术的博客园地址,则可......
  • SpringBoot 实现 PDF 添加水印
    方式一:使用ApachePDFBox库1.添加PDFBox依赖首先,在pom.xml文件中添加PDFBox的依赖:<dependency>    <groupId>org.apache.pdfbox</groupId>    <artifactId>pdfbox</artifactId>    <version>2.0.24</version></dependency>2.添加水印......
  • 怎么给网站底部添加备案号
    要在网站底部添加备案号,可以按照以下步骤操作:获取备案号:确保你已经完成了网站的ICP备案,并获得了备案号。编辑HTML文件:打开你的网站底部HTML文件,通常这个文件可能位于footer.html或类似的文件中。在适当的位置添加备案号的HTML代码。例如:  样式调整:如果需......
  • 高德地图怎么添加公司位置信息?
    随着互联网的快速发展,高德地图也逐渐成为了我们日常出行的必备工具。无论是外出游玩,还是上班通勤,都需要依靠高德地图去规划路线,再导航前往目的地。而对于企业来说,将公司位置添加到高德地图上尤为重要。因为这样不仅可以方便客户和求职者轻松找到公司位置,提高到访便利性,还能增强......
  • .net7.0 WebApi 添加 JWT 验证
    https://blog.csdn.net/u012563853/article/details/128659472详细步骤:1.创建默认WebApi项目2.开始添加认证包安装Microsoft.AspNetCore.Authentication.JwtBearer包这个包是用来支持WebApi的JWT认证的3.在appsetting中配置JWT的配置信息这里需要注意的是key......