张国伟 发表于 2024-9-10 08:06:57

51.HarmonyOS鸿蒙系统 App(ArkUI)通知

普通文本通知测试 https://i-blog.csdnimg.cn/blog_migrate/925f52af72132670403b8fe2dda37398.png
长文本通知测试 https://i-blog.csdnimg.cn/blog_migrate/4544d388f2f30e25d64008f2139ed2da.png
多行文本通知测试 https://i-blog.csdnimg.cn/blog_migrate/ebf8fe20e31de2cb7316c867affc3a62.png
图片通知测试 https://i-blog.csdnimg.cn/blog_migrate/60d4dc4a186bf731f83c0ed28a4c3957.png
进度条通知测试 https://i-blog.csdnimg.cn/blog_migrate/8fe6b2a5797b77b6a1bd763dd7e701c1.png
通知简介

应用可以通过通知接口发送通知消息,终端用户可以通过通知栏检察通知内容,也可以点击通知来打开应用。
通知常见的利用场景:


[*] 体现接收到的短消息、即时消息等。
[*] 体现应用的推送消息,如广告、版本更新等。
[*] 体现当前正在进行的变乱,如下载等。
HarmonyOS通过ANS(Advanced Notification Service,通知系统服务)对通知范例的消息进行管理,支持多种通知范例,如底子范例通知、进度条范例通知。
通知业务流程

通知业务流程由通知子系统、通知发送端、通知订阅端构成。一条通知从通知发送端产生,通过IPC通信发送到通知子系统,再由通知子系统分发给通知订阅端。


[*] 通知发送端:可以是三方应用或系统应用。开发者重点关注。
[*] 通知订阅端:只能为系统应用,比如通知中心。通知中心默认会订阅手机上全部应用对当前用户的通知。开发者无需关注。

https://i-blog.csdnimg.cn/blog_migrate/369aec499e3e67031a00ac93d95511ea.png
底子范例通知紧张应用于发送短信息、提示信息、广告推送等,支持平凡文本范例、长文本范例、多行文本范例和图片范例。
表1 底子范例通知中的内容分类
范例
描述
NOTIFICATION_CONTENT_BASIC_TEXT
平凡文本范例。
NOTIFICATION_CONTENT_LONG_TEXT
长文本范例。
NOTIFICATION_CONTENT_MULTILINE
多行文本范例。
NOTIFICATION_CONTENT_PICTURE
图片范例。
 https://i-blog.csdnimg.cn/blog_migrate/70a1db133337042dd364b10fb7e034a6.png
import NotificationManager from '@ohos.notificationManager';import image from '@ohos.multimedia.image';import wantAgent from '@ohos.app.ability.wantAgent';//import { Header} from '../common/components/CommonComponents'//为通知添加行为意图,点击通知栏启动相关app应用步伐,呼出对应应用步伐let wantAgentObj = null; // 用于生存创建乐成的wantAgent对象,后续利用其完成触发的动作。// 通过WantAgentInfo的operationType设置动作范例。let wantAgentInfo = {wants: [    {      deviceId: '',      bundleName: 'com.example.myapplication',      abilityName: 'EntryAbility',      action: '',      entities: [],      uri: '',      parameters: {}    }],operationType: wantAgent.OperationType.START_ABILITY,requestCode: 0,wantAgentFlags:}// 创建WantAgent// wantAgent.getWantAgent(wantAgentInfo, (err, data) => {//   if (err) {//   console.error('getWantAgent err=' + JSON.stringify(err));//   } else {//   console.info('getWantAgent success');//   wantAgentObj = data;//   }// });// 构造NotificationRequest对象行为意图let notificationRequest_behavior = {content: {    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,    normal: {      title: '行为意图Test_Title_呼出app',      text: '行为意图Test_Text',      additionalText: 'Test_AdditionalText',    },},id: 6,label: 'TEST',wantAgent: wantAgentObj,}// 图片构造const color = new ArrayBuffer(60000);let bufferArr = new Uint8Array(color);for (var i = 0; i<bufferArr.byteLength;i++) {bufferArr = 60;bufferArr = 20;bufferArr = 220;bufferArr = 100;}let opts = { editable:true, pixelFormat:"ARGB_8888", size: {height:100, width : 150}};let imagePixelMap: PixelMap = undefined;NotificationManager.isSupportTemplate('downloadTemplate').then((data) => {console.info(` isSupportTemplate success`);console.info('Succeeded in supporting download template notification.');let isSupportTpl: boolean = data; // isSupportTpl的值为true表示支持支持downloadTemplate模板类通知,false表示不支持}).catch((err) => {console.error(`Failed to support download template notification. Code is ${err.code}, message is ${err.message}`);});let template = {name:'downloadTemplate',data: {    title: '标题:',    fileName: 'music.mp4',    progressValue: 30,    progressMaxValue:100,}}//构造NotificationRequest对象let notificationRquest_progress = {id: 5,slotType: NotificationManager.SlotType.OTHER_TYPES,template: template,content: {    contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,    normal: {      title: template.data.title + template.data.fileName,      text: "sendTemplate",      additionalText: "30%"    }},deliveryTime: new Date().getTime(),showDeliveryTime: true}let notificationRequest2 = {id:1,content:{    contentType:NotificationManager.ContentType.NOTIFICATION_CONTENT_BASIC_TEXT,//平凡文本范例通知    normal:{      title:'测试标题123',      text:'测试内容567',      additionalText:'平凡文本范例通知'    }}}let notificationRequest_long = {id:2,content:{    contentType:NotificationManager.ContentType.NOTIFICATION_CONTENT_LONG_TEXT,//长文本范例通知    longText:{      title:'长文本范例通知标题123',      text:'测试内容567',      additionalText:'长文本范例通知',      longText: 'test_longText',      briefText: 'test_briefText',      expandedTitle: '长文本范例通知标题',    }}}let notificationRequest_multiline = {id:3,content:{    contentType:NotificationManager.ContentType.NOTIFICATION_CONTENT_MULTILINE,//多行文本范例通知    multiLine:{      title:'多行文本范例标题123',      text:'多行文本范例内容567',      briefText: 'test_briefText',      longTitle: '多行文本范例',      lines: ['1行', '2行', '3行', '4行','5行'],    }}}////Argument of type '{ id: number; content: { contentType: NotificationManager.ContentType; normal: { title: string; test: string; additionalText: string; }; }; }' is not assignable to parameter of type 'NotificationRequest'. The types of 'content.normal' are incompatible between these types. Property 'text' is missing in type '{ title: string; test: string; additionalText: string; }' but required in type 'NotificationBasicContent'. <tsCheck>//Argument of type '{ id: number; content: { contentType: NotificationManager.ContentType; normal: { title: string; test: string; additionalText: string; }; }; }' is not assignable to parameter of type 'NotificationRequest'. <tsCheck>@Entry@Componentstruct Index {@State message: string = 'Hello World你好,世界很精彩'@State imagePixelMap: PixelMap = undefined;@State url :string =''// 全局使命idindex: number = 6@State bundleName: string = ''public async get_bundleName() {    this.bundleName = await globalThis.context.abilityInfo.bundleName}//aboutToAppear函数在创建自界说组件的新实例后,在执行其build()函数之前执行。允许在aboutToAppear函数中改变状态变量,更改将在后续执行build()函数中生效。async aboutToAppear() {            {            let rm = getContext(this).resourceManager;    // 读取图片    let file = await rm.getMediaContent($r('app.media.leaf'))    // 创建PixelMap    image.createImageSource(file.buffer).createPixelMap()      .then(value => this.imagePixelMap = value)      .catch(reason => console.log('testTag', '加载图片异常', JSON.stringify(reason)))            }}// 图片型文本发送publishPictureNotification() {    let request: NotificationManager.NotificationRequest = {      id: this.index++,      content: {      contentType: NotificationManager.ContentType.NOTIFICATION_CONTENT_PICTURE,      picture: {          title: '图片通知标题' + this.index,          text: '图片通知内容详情',          additionalText: '图片通知附加内容',          briefText: '图片通知概要和总结',          expandedTitle: '图片睁开后标题' + this.index,          picture: this.imagePixelMap      }      }    }    NotificationManager.publish(request,(err)=>{      if(err)      {      console.error(`图片范例通知失败,err[${err}]`);      return;      }      console.info('图片文本范例通知乐成')    });}httpRequest2(){    let aa:PixelMap = undefined    let imageRes = image.createImageSource(this.url)}build() {    Row() {      Column() {      Text(this.message)          .fontSize(50)          .fontWeight(FontWeight.Bold)      Button('普通文本通知测试')          .onClick(()=>{            NotificationManager.publish(notificationRequest2,(err)=>{            if(err)            {                console.error(`平凡文本范例通知失败,err[${err}]`);                return;            }            console.info('平凡文本范例通知乐成')            });          })      Button('长文本通知测试')          .onClick(()=>{            NotificationManager.publish(notificationRequest_long,(err)=>{            if(err)            {                console.error(`长文本通知测试失败,err[${err}]`);                return;            }            console.info('长文本通知测试乐成')            });          })      Button('多行文本通知测试')          .onClick(()=>{            NotificationManager.publish(notificationRequest_multiline,(err)=>{            if(err)            {                console.error(`多行文本通知测试失败,err[${err}]`);                return;            }            console.info('多行文本通知测试乐成')            });          })      Button('图片通知测试')          .onClick(()=>{         // this.url = $r('app.media.icon')            this.publishPictureNotification();          })      Button('进度条通知测试')          .onClick(()=>{            NotificationManager.publish(notificationRquest_progress,(err)=>{            if(err)            {                console.error(`进度条通知测试失败,err[${err}]`);                return;            }            console.info('进度条通知测试乐成')            });          })      // Button('行为意图通知测试_呼出app')      //   .onClick(()=>{      //      //      //   })      }      .width('100%')    }    .height('100%')}}  
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 51.HarmonyOS鸿蒙系统 App(ArkUI)通知