鸿蒙NEXT开发-用户通知服务的封装和文件下载通知

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下

如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识

专栏地址: https://blog.csdn.net/qq_56760790/category_12794123.html

鸿蒙next学习交流q群:767465523

目录

 1. 用户通知服务基本介绍

2. 能力范围

3. 业务流程

4. 用户通知服务-工具类封装小案例

4.1 基本介绍

4.2 操作环境

4.3 代码实现

4.3.1 文本通知工具类

4.3.2 文件通知工具类

4.3.3 页面的编写

5. 学习地址


 1. 用户通知服务基本介绍

Notification Kit(用户通知服务)为开发者提供本地通知发布通道,开发者可借助Notification Kit将应用产生的通知直接在客户端本地推送给用户,本地通知根据通知类型及发布场景会产生对应的铃声、震动、横幅、锁屏、息屏、通知栏提醒和显示。

2. 能力范围

Notification Kit支持的能力主要包括:

  • 发布文本、进度条等类型通知。
  • 携带或更新应用通知数字角标。
  • 取消曾经发布的某条或全部通知。
  • 查询已发布的通知列表。
  • 查询应用自身通知开关状态。
  • 应用通知用户的能力默认关闭,开发者可拉起授权框,请求用户授权发布通知。

3. 业务流程

使用Notification Kit的主要业务流程如下:

1.请求通知授权。

2.应用发布通知到通知服务。

3.将通知展示到通知中心。

Notification Kit中常用的通知样式如下:

注意:

  • 单个应用已发布的通知在通知中心等系统入口的留存数量有限(当前规格最多24条)。
  • 通知的长度不能超过200KB(跨进程序列化大小限制)。
  • 系统所有应用发布新通知的频次累计不能超过每秒10条,更新通知的频次累计不能超过每秒20条。

官方文档地址:文档中心

4. 用户通知服务-工具类封装小案例

4.1 基本介绍

通过案例我们能学习到:用户通知服务还有部分文件服务基础能力工具类的封装,教大家如何进行工具类封装。

主体功能:用户点击下载文件按钮,触发通知,也可以取消通知

4.2 操作环境

记得在module.json文件中配置网络权限

    "requestPermissions":[{"name" : "ohos.permission.INTERNET","reason": "$string:internet","usedScene": {"abilities": ["FormAbility"],"when":"inuse"}}],

4.3 代码实现

界面如下:

4.3.1 文本通知工具类

NotificationUtil.ets

import { notificationManager } from '@kit.NotificationKit';
import { common } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';export class NotificationUtil {/*** 查询通知是否授权*/static async isNotificationEnabled(): Promise<boolean> {return await notificationManager.isNotificationEnabled(); //查询通知是否授权。}/*** 请求通知授权,第一次调用会弹窗让用户选择。* @returns*/static async authorizeNotification(): Promise<boolean> {let isEnabled = await NotificationUtil.isNotificationEnabled(); //查询通知是否授权if (!isEnabled) { //未授权,拉起授权try {let context = getContext() as common.UIAbilityContext;await notificationManager.requestEnableNotification(context);return true;} catch (e) {return false;}} else {return true;}}/*** 发起普通文本通知*/static publishText(notificationOptions: NotificationOptions): Promise<boolean> {return new Promise<boolean>((resolve, reject) => {let notificationRequest: notificationManager.NotificationRequest = {// 通知的唯一idid: notificationOptions.id,content: {notificationContentType: notificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT, // 普通文本类型通知normal: {// 通知的标题title: notificationOptions.title,// 通知的内容text: notificationOptions.text,// 附加消息additionalText: notificationOptions.additionalText,}}};notificationManager.publish(notificationRequest, (err: BusinessError) => {if (err) {console.log(`Failed to publish notification. Code is ${err.code}, message is ${err.message}`)reject(err)}console.log('Succeeded in publishing notification.')resolve(true)});})}/*** 取消通知*/static cancel(id: number): Promise<boolean> {return new Promise<boolean>((resolve, reject) => {notificationManager.cancel(id, (err: BusinessError) => {if (err) {console.log(`Failed to cancel notification. Code is ${err.code}, message is ${err.message}`)reject(err)}console.log('Succeeded in cancel notification.')resolve(true)});})}/*** 取消所有通知*/static cancelAll(): Promise<boolean> {return new Promise<boolean>((resolve, reject) => {notificationManager.cancelAll((err: BusinessError) => {if (err) {console.log(`Failed to cancel notification. Code is ${err.code}, message is ${err.message}`)reject(err)}console.log('Succeeded in cancel notification.')resolve(true)});})}
}interface NotificationOptions {id: numbertitle: stringtext: stringadditionalText: string}

4.3.2 文件通知工具类

FileUtil.ets

import { common } from '@kit.AbilityKit';
import fs from '@ohos.file.fs';
import request from '@ohos.request';
import { BusinessError } from '@ohos.base';let context = getContext(this) as common.UIAbilityContext;export class FileUtil {/*** 判断文件是否存在*/static isExist(fileName: string, fileSuffix: string) {// 判断文件是否存在,存在就删除let path = context.filesDir + '/' + fileName + '.' + fileSuffix;if (fs.accessSync(path)) {fs.unlinkSync(path);}}/*** 下载文件*/static downloadFile(fileName: string, fileSuffix: string, fileUrl: string): Promise<boolean> {return new Promise<boolean>((resolve, reject) => {// 判断文件是否已存在FileUtil.isExist(fileName, fileSuffix)request.downloadFile(context, {url: fileUrl,filePath: context.filesDir + '/' + fileName + '.' + fileSuffix}).then((downloadTask: request.DownloadTask) => {downloadTask.on('complete', () => {resolve(true)})}).catch((err: BusinessError) => {console.error(`Invoke downloadTask failed, code is ${err.code}, message is ${err.message}`);reject(err)});})}
}

4.3.3 页面的编写

Index.ets

import { NotificationUtil } from '../utils/NotificationUtil'
import { promptAction } from '@kit.ArkUI'
import { BusinessError } from '@kit.BasicServicesKit'
import { FileUtil } from '../utils/FileUtil'@Entry@Componentstruct Index {build() {Column({ space: 20 }) {Button('发起通知').onClick(async () => {// 发起通知授权let isSuccess = await NotificationUtil.authorizeNotification()if (isSuccess) {// 发起通知NotificationUtil.publishText({id: 1,title: '百得知识库',text: '百得知识库提醒你该学习了',additionalText: '百得'}).then(() => {promptAction.showToast({ message: '发起通知成功' })}).catch((error: BusinessError) => {promptAction.showToast({ message: '发起通知失败' + error.message })})} else {promptAction.showToast({ message: '通知授权失败' })}}).margin(100)Button('取消通知').onClick(async () => {let flag = await NotificationUtil.cancel(1)if (flag) {promptAction.showToast({ message: '取消通知成功' })return}promptAction.showToast({ message: '取消通知失败' })})Button('取消所有通知').onClick(async () => {let flag = await NotificationUtil.cancelAll()if (flag) {promptAction.showToast({ message: '取消所有通知成功' })return}promptAction.showToast({ message: '取消所有通知失败' })}).margin(100)Button('下载文件完成通知').onClick(() => {FileUtil.downloadFile('hello', 'txt', 'http://121.41.123.231:8888/f/e01ace4294264594b632/?dl=1').then(async (data) => {promptAction.showToast({ message: '文件下载成功' })// 发起通知授权let isSuccess = await NotificationUtil.authorizeNotification()if (isSuccess) {// 发起通知NotificationUtil.publishText({id: 2,title: '百得知识库',text: '文件下载成功',additionalText: '百得'}).then((data) => {if (data) {promptAction.showToast({ message: '发起通知成功' })return}promptAction.showToast({ message: '发起通知失败' })}).catch((error: BusinessError) => {promptAction.showToast({ message: '发起通知失败' + error.message })})} else {promptAction.showToast({ message: '通知授权失败' })}}).catch((error: BusinessError) => {promptAction.showToast({ message: '文件下载失败' + error.message })})})}.height('100%').width('100%').justifyContent(FlexAlign.Center)}}

5. 学习地址

全网首发鸿蒙NEXT星河版零基础入门到实战,2024年最新版,企业级开发!视频陆续更新中!_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/475096.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++——智能指针剖析

参考&#xff1a; 恋恋风辰官方博客 动态内存管理 - cppreference.com SRombauts/shared_ptr&#xff1a; 一个最小的 shared/unique_ptr 实现&#xff0c;用于处理 boost/std&#xff1a;&#xff1a;shared/unique_ptr 不可用的情况。 C智能指针_c 智能指针-CSDN博客 当…

【java】java入门

盘符名称冒号---------盘符切换 dir---------------查看当前路径下的内容 cd目录--------进入单级目录 cd..----------回退到上一级目录 cd \----------回退到盘符目录 cls----------清屏 exit 为什么要配环境变量&#xff1f; 在任意的目录下都可以打开指定的软件。把软件的路…

11.19.2024刷华为OD

文章目录 HJ51HJ53 杨辉三角HJ56HJ57 高精度整数加法HJ58HJ60 简单题HJ63 DNA序列&#xff08;简单题&#xff09;语法知识记录 HJ51 https://www.nowcoder.com/practice/54404a78aec1435a81150f15f899417d?tpId37&tags&title&difficulty0&judgeStatus0&…

数据挖掘英语及概念

分类 classify 上涨或跌 回归 regression 描述具体数值 分类模型评估 1.混淆&#xff08;误差&#xff09;矩阵 confusion matrix 2.ROC曲线 receiver operating characteristic curve 接收者操作特征曲线 3.AUC面积 area under curve ROC曲线下与坐标轴围成的面积&#x…

GOLANG+VUE后台管理系统

1.截图 2.后端工程截图 3.前端工程截图

go-zero(三) 数据库操作

go-zero 数据库操作 在本篇文章中&#xff0c;我们将实现一个用户注册和登录的服务。我们将为此构建一个简单而高效的 API&#xff0c;包括请求参数和响应参数的定义。 一、Mysql连接 1. 创建数据库和表 在 MySQL 中创建名为 test_zero的数据库&#xff0c;并创建user 表 …

MFC图形函数学习09——画多边形函数

这里所说的多边形是指在同一平面中由多条边构成的封闭图形&#xff0c;强调封闭二字&#xff0c;否则无法进行颜色填充&#xff0c;多边形包括凸多边形和凹多边形。 一、绘制多边形函数 原型&#xff1a;BOOL Polygon(LPPOINT lpPoints,int nCount); 参数&#x…

【算法】回文数索引、回文子串输出、整数反转

目录 回文数索引 思路&#xff1a; 回文子串输出 思路 回文数索引 思路&#xff1a; 目标字母索引可能是一个或者是两个&#xff0c;返回任意的一个索引即可&#xff0c;如果已经是回文串则直接返回-1。 下面列出几种目标删除字母可能出现的位置&#xff1a; 我们可以先定…

MAC创建一个自动操作,启动系统【睡眠】功能,并将绑定快捷键

目的 通过 Automator 创建一个服务来启动系统【睡眠】这个功能&#xff0c;并绑定快捷键。 步骤一&#xff1a;创建 Automator 服务 打开 Automator&#xff1a; ○ 在 Spotlight 中搜索 Automator&#xff0c;然后打开。选择服务类型&#xff1a; ○ 在 Automator 的启动界…

ThinkPHP6门面(Facade)

门面 门面&#xff08;Facade&#xff09; 门面为容器中的&#xff08;动态&#xff09;类提供了一个静态调用接口&#xff0c;相比于传统的静态方法调用&#xff0c; 带来了更好的可测试性和扩展性&#xff0c;你可以为任何的非静态类库定义一个facade类。 系统已经为大部分…

1436:数列分段II -整型二分

1436&#xff1a;数列分段II 题目来源&#xff1a;一本通 【输入样例】 5 3 4 2 4 5 1【输出样例】 6题意 将数列分成若干段&#xff0c;最多M段&#xff0c;求这些段中最大值中的最小值。&#xff08;M<N是M的约束&#xff09; 思路 最大最小问题考虑二分。由于M越大&…

Linux-第1集-基础指令 pwd、cd……入门

欢迎来到Linux操作系统的世界&#xff0c;本集我会用最简单的语言给大家讲解最基础的指令。 首先我们要明确Linux是通过指令完成相应的操作&#xff0c; 由于Linux的用户都是行内人&#xff0c;所有我们在学习此操作系统时看到的都是指令界面&#xff0c;而非像Windows操作系…

Golang | Leetcode Golang题解之第564题寻找最近的回文数

题目&#xff1a; 题解&#xff1a; func nearestPalindromic(n string) string {m : len(n)candidates : []int{int(math.Pow10(m-1)) - 1, int(math.Pow10(m)) 1}selfPrefix, _ : strconv.Atoi(n[:(m1)/2])for _, x : range []int{selfPrefix - 1, selfPrefix, selfPrefix …

【最新鸿蒙应用开发】——合理使用自定义弹框

自定义弹窗选型 合理选择不同的系统能力实现弹窗&#xff0c;有利于提升应用开发效率&#xff0c;实现更好的功能需求&#xff0c;因此了解自定义弹窗的选型和差异非常重要。在应用开发中&#xff0c;为了选择出合适的弹窗选型&#xff0c;从使用场景上&#xff0c;需要重点关…

044 商品详情(异步编排)

文章目录 销售属性分组规格参数异步编排application.ymlMyThreadConfig.javaThreadPoolConfigProperties.javaSkuInfoServiceImpl.java 销售属性 sku表&#xff1a;tb_sku_info sku对应销售属性表&#xff1a;tb_sku_sale_attr_value 结果 在详情页系统中&#xff0c;切换属…

【热门主题】000054 ECMAScript:现代 Web 开发的核心语言

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 【热…

进程优先级——Linux

目录 前言 查看系统进程 进程优先级的修改 Linux调度与切换 Cpu的进程切换 Linux实现调度的算法 前言 进程访问系统资源要排队等待&#xff0c;而cpu资源分配和执行的先后顺序&#xff0c;就是指进程的优先级。进程的优先级&#xff0c;保证了必要进程的执行。进程访问某…

11.18 Maven-SpringBootWeb入门

Maven 什么是maven? Maven是apache旗下的一个开源项目&#xff0c;是一款用于管理和构建java项目的工具。 Apache 软件基金会&#xff0c;成立于1999年7月&#xff0c;是目前世界上最大的最受欢迎的开源软件基金会&#xff0c;也是一个专门为支持开源项目而生的非盈利性组织…

selenium元素定位校验以及遇到的元素操作问题记录

页面元素定位方法及校验 使用比较多的是通过id、class和xpath来对元素进行定位。在定位前可以现在浏览器验证是否可以找到指定的元素。这样就不用每添加一个元素定位都运行代码来检查定位方式表达式是否正确。 使用XPATH定位 在浏览器F12&#xff0c;找到元素&#xff0c;在元…

【UGUI】Unity 背包系统实现02:道具信息提示与显示

在游戏开发中&#xff0c;背包系统是一个常见的功能模块&#xff0c;用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统&#xff0c;包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系…