codecamp

鸿蒙OS 创建应用通知开发指导

接口介绍

通知相关基础类包含 [NotificationSlot]、[NotificationRequest] 和 [NotificationHelper]。详细的接口信息请参考通知开发指导。基础类之间的关系如下所示:

图1 通知基础类关系图

img

  • NotificationSlot

NotificationSlot 可以对提示音、振动和重要级别等进行设置。一个应用可以创建一个或多个 NotificationSlot,在发送通知时,通过绑定不同的 NotificationSlot,实现不同用途。

说明

NotificationSlot 需要先通过 NotificationHelper 的 addNotificationSlot (NotificationSlot)方法发布后,通知才能绑定使用;所有绑定该 NotificationSlot 的通知在发布后都具备相应的特性,对象在创建后,将无法更改其设置属性,对于是否启动相应设置,用户有最终控制权。

不指定 NotificationSlot 时,当前通知会使用默认的 NotificationSlot,默认的 NotificationSlot 优先级为 LEVEL_DEFAULT,声音为系统默认提示音。

NotificationSlot 的级别目前支持如下几种:

  • LEVEL_NONE: 表示通知不发布。
  • LEVEL_MIN/LEVEL_LOW/LEVEL_DEFAULT/LEVEL_HIGH:表示通知发布后可在通知中心显示,自动弹出,触发提示音。

  • NotificationRequest

NotificationRequest 用于设置具体的通知对象,包括设置通知的属性,如:通知的小图标、自动删除等参数,以及设置具体的通知类型,如普通文本、长文本等。

通知的常用属性:

  • 小图标

点击放大

标识说明:img为通过 NotificationRequest.setLittleIcon(PixelMap)设置的小图标。

  • 从通知启动 Ability:点击通知栏的通知,可以通过启动 Ability,触发新的事件。

通知设置 NotificationRequest 的 setIntentAgent(IntentAgent) 后,点击通知栏上发布的通知,将触发通知中的 IntentAgent 承载的事件。IntentAgent 的设置请参考IntentAgent开发指导

  • 通知设置 ActionButton:通过点击通知按钮,可以触发按钮承载的事件。

点击放大

标识说明:imgimg为两个通过 NotificationRequest.addActionButton(NotificationActionButton)设置的通知附加按钮,点击按钮后可以触发相关的事件,具体事件内容如何设置需要参考 NotificationActionButton。

具体的通知类型:目前支持三种类型,包括普通文本 NotificationNormalContent、长文本 NotificationLongTextContent、图片 NotificationPitctureContent。

  • 普通文本通知样式(NotificationNormalContent)

点击放大

标识说明:img为通知的标题,通过 NotificationNormalContent.setTitle(String)设置。img为通知的内容,通过NotificationNormalContent.setText(String)设置。通知标题和内容至少要设置一个。

  • 长文本通知样式(NotificationLongTextContent)

点击放大

标识说明:img为通知的长文本,通过 NotificationLongTextContent.setLongText(String) 设置,文本长度最大支持1024个字符。

  • 图片通知样式(NotificationPictureContent)

点击放大

标识说明:img 为图片通知样式的图片,通过NotificationPictureContent.setBigPicture(PixelMap bigPicture)设置。

说明

通知发布后,通知的设置不可修改。如果下次发布通知使用相同的ID,就会更新之前发布的通知。

  • NotificationHelper

NotificationHelper封装了发布、更新、订阅、删除通知等静态方法。订阅通知、退订通知和查询系统中所有处于活跃状态的通知,有权限要求需为系统应用或具有订阅者权限。

开发步骤

通知的开发指导分为创建NotificationSlot、发布通知和取消通知等开发场景。

创建NotificationSlot

NotificationSlot可以设置公共通知的提示声等,并通过调用NotificationHelper.addNotificationSlot()发布NotificationSlot对象。

// 创建notificationSlot对象
NotificationSlot slot = new NotificationSlot("slot_001","slot_default", NotificationSlot.LEVEL_DEFAULT); 
slot.setDescription("NotificationSlotDescription");
try {
    NotificationHelper.addNotificationSlot(slot);
} catch (RemoteException ex) {
    HiLog.warn(LABEL, "addNotificationSlot occur exception.");
}

发布通知

  1. 构建 NotificationRequest 对象,应用发布通知前,通过 NotificationRequet 的 setSlot() 方法与 NotificationSlot 绑定,使该通知在发布后都具备该对象的特征。

   int notification_id = 1;
   NotificationRequest request = new NotificationRequest(notification_id);
   request.setSlotId(slot.getId());

  1. 调用 setContent() 设置通知的内容。

   String title = "title";
   String text = "There is a normal notification content.";
   NotificationRequest.NotificationNormalContent content = new NotificationRequest.NotificationNormalContent();
   content.setTitle(title)
          .setText(text);
   NotificationRequest.NotificationContent notificationContent = new NotificationRequest.NotificationContent(content);
   // 设置通知的小图标
   request.setLittleIcon(PixelMap); 
   // 设置通知的内容
   request.setContent(notificationContent); 

  1. 调用 setIntentAgent() 设置通知可以触发的事件。

   // 指定要启动的ability的ElementName字段
   ElementName elementName = new ElementName("", "com.example.testintentagent", "com.example.testintentagent.IntentAgentAbility");
   // 将ElementName字段添加到Intent中
   Intent intent = new Intent();
   intent.setElement(elementName);
   List<Intent> intentList = new ArrayList<>();
   intentList.add(intent);
   // 指定启动一个有页面的ability
   IntentAgentInfo intenAgentinfo = new IntentAgentInfo(request.getNotificationId(), IntentAgentConstant.OperationType.START_ABILITY, IntentAgentConstant.Flags.UPDATE_PRESENT_FLAG, intentList, null);
   // 获取IntentAgent实例
   IntentAgent intentAgent = IntentAgentHelper.getIntentAgent(mContext, intenAgentinfo);
   request.setIntentAgent(intentAgent);
   request.setTapDismissed(true);

  1. 调用 publishNotification() 发送通知。

   try {
      NotificationHelper.publishNotification(request);
   } catch (RemoteException ex) {
      HiLog.warn(LABEL, "publishNotification occur exception.");
   }

取消通知

取消通知分为取消指定单条通知和取消所有通知,应用只能取消自己发布的通知。

  • 调用 cancelNotification() 取消指定的单条通知。

  int notification_id = 1;
  try {
      NotificationHelper.cancelNotification(notification_id);
  } catch (RemoteException ex) {
      HiLog.warn(LABEL, "cancelNotification occur exception.");
  }
鸿蒙OS 创建应用通知介绍
鸿蒙OS 降低应用功耗
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

鸿蒙OS 开发

鸿蒙OS 术语

鸿蒙OS Java API参考

鸿蒙OS ohos.aafwk.ability

鸿蒙OS ohos.aafwk.abilityjet.activedata

鸿蒙OS ohos.aafwk.content

鸿蒙OS java.lang

鸿蒙OS java.Util

鸿蒙OS java.Util class

鸿蒙OS ohos.data.dataability

鸿蒙OS ohos.data.dataability class

鸿蒙OS ohos.agp.components

鸿蒙OS ohos.agp.components interface

鸿蒙OS ohos.agp.components class

鸿蒙OS ohos.global.configuration

鸿蒙OS java.io

鸿蒙OS ohos.data.resultset

鸿蒙OS ohos.data.resultset interface

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }