本地通知使用指导

← 返回本地通知组件参考 · 全部使用指导

本地通知使用指导

本地通知在手机顶部的通知栏发通知,由 App 自己发出,不需要服务器。四种样式:

样式 方法 适合
普通通知 显示(编号,标题,文本)(Show) 提醒、消息,文字长时下拉可展开
大图通知 显示带图通知(编号,标题,文本,图像位址)(ShowWithImage) 拍照、生成海报后提示用户查看
进度通知 显示进度通知(编号,标题,文本,进度,最大值)(ShowProgress) 下载、上传、批量处理
带按钮通知 显示带按钮通知(编号,标题,文本,按钮列表)(ShowWithButtons) 「知道了 / 稍后提醒」这类快速操作

核心概念:通知序号

每条通知用一个序号(整数)区分:

  • 不同序号各占通知栏的一条,可以同时存在;
  • 同一序号再发就是更新原来那条(进度通知就是靠这个反复更新进度);
  • 取消(编号)(Cancel)按序号收起;全部取消(CancelAll)收起本 App 发的全部通知;
  • 用户点通知或通知上的按钮时,事件会带回这个序号,用来判断是哪一条。

建议给每类通知固定一个序号,比如 1 = 提醒、2 = 会议、3 = 下载。

权限:安卓 13 及以上第一次发通知时会弹出授权提示;用户拒绝后通知发不出来,并触发屏幕的「权限被拒绝」事件。

快速上手

拖一个本地通知和一个按钮:

when 按钮1.Click() {
  本地通知1.Show(1, "你好", "这是我的第一条通知")
}

点按钮,下拉通知栏就能看到这条通知。

案例一:每小时喝水提醒

用计时器每隔一小时发一次提醒(计时器的「计时间隔」设为 3600000 毫秒,即 1 小时):

when 按钮_开启提醒.Click() {
  计时器1.TimerInterval = 3600000
  计时器1.TimerEnabled = true
  本地通知1.Show(1, "喝水提醒已开启", "每小时提醒你喝水一次")
}

when 计时器1.Timer() {
  本地通知1.Show(1, "喝水时间到", "工作一小时了,起来喝杯水、活动一下吧")
}

when 按钮_关闭提醒.Click() {
  计时器1.TimerEnabled = false
  本地通知1.Cancel(1)
}

用的都是序号 1,所以通知栏始终只有一条喝水提醒,新的覆盖旧的。 注意:计时器只在 App 运行时工作,App 被关掉后不会再提醒;本组件不支持关闭 App 后的定时提醒。

案例二:会议提醒与「稍后提醒」

通知上带两个按钮,点「稍后提醒」5 分钟后再提醒一次:

when 按钮_会议.Click() {
  本地通知1.ShowWithButtons(2, "会议提醒", "10 分钟后在三楼会议室开会", list("知道了", "稍后提醒"))
}

when 本地通知1.ButtonClicked(编号, 按钮) {
  if 按钮 == "稍后提醒" {
    计时器_稍后.TimerInterval = 300000
    计时器_稍后.TimerEnabled = true
  }
}

when 计时器_稍后.Timer() {
  计时器_稍后.TimerEnabled = false
  本地通知1.ShowWithButtons(2, "会议提醒", "5 分钟后开会,别忘了", list("知道了", "稍后提醒"))
}

要点:按钮最多 3 个;点按钮后通知自动收起;事件里的「按钮」参数是按钮上的文字。

案例三:下载进度通知

同一个序号反复调用显示进度通知(编号,标题,文本,进度,最大值)(ShowProgress)更新进度。下面用计时器模拟下载 (计时器间隔设为 500 毫秒):

global 进度 = 0

when 按钮_下载.Click() {
  进度 = 0
  计时器_下载.TimerEnabled = true
}

when 计时器_下载.Timer() {
  进度 = 进度 + 5
  本地通知1.ShowProgress(3, "正在下载资料包", join("已完成 ", 进度, "%"), 进度, 100)
  if 进度 >= 100 {
    计时器_下载.TimerEnabled = false
    本地通知1.Show(3, "下载完成", "资料包已保存,点击查看")
  }
}

要点:

  • 进度没到最大值时通知不能划掉;到了最大值自动变成普通通知,这里再用同一序号改成「下载完成」;
  • 不知道总量时,最大值传 0,显示来回滚动的「不确定进度」。

案例四:拍照后发大图通知

拍完照在通知里预览照片,用户下拉展开通知就能看到大图:

when 按钮_拍照.Click() {
  照相机1.TakePicture()
}

when 照相机1.AfterPicture(图像位址) {
  本地通知1.ShowWithImage(4, "照片已保存", "下拉展开看看刚拍的照片", 图像位址)
}

图片可以是素材文件名,也可以是本地路径;照片太大时可先用图片处理压缩。

案例五:点通知回到 App 后跳到对应页面

用户点通知回到 App 时触发被点击(编号)(Clicked),按序号决定显示哪个页面:

when 本地通知1.Clicked(编号) {
  if 编号 == 2 {
    滑动分页1.CurrentPage = 2
  } else if 编号 == 3 {
    滑动分页1.CurrentPage = 3
  }
}

案例六:锁屏和通知栏控制音乐播放

显示媒体通知(标题,艺术家,封面)(ShowMedia)在通知栏和锁屏显示歌名、歌手和「上一首 / 播放暂停 / 下一首」, 耳机按键也能控制,显示期间退到后台继续播放。把播放器(Player)属性绑定到音频播放器后, 播放 / 暂停自动控制它,只需处理切歌(音频播放器的「仅前台播放」保持不勾选):

when Screen1.Initialize() {
  本地通知1.Player = 音频播放器1
}

when 按钮_播放.Click() {
  音频播放器1.Source = "a.mp3"
  音频播放器1.Start()
  本地通知1.ShowMedia("晴天", "周杰伦", "")
}

when 本地通知1.NextClicked() {
  音频播放器1.Source = "b.mp3"
  音频播放器1.Start()
  本地通知1.ShowMedia("七里香", "周杰伦", "")
}

不播了调用关闭媒体通知(HideMedia)。完整歌单写法见组件参考。

外观

  • 小图标(SmallIcon):状态栏里的小图标,用白色、透明底的简单图形素材(彩色图片会显示成方块);留空用系统图标;
  • 颜色(Color):小图标和按钮文字的强调色;
  • 通知里的大图标固定使用 App 图标。

常见问题

现象 原因与处理
通知没出现 手机设置里本 App 的通知被关闭;安卓 13+ 首次发通知时拒绝了授权
新通知把旧的覆盖了 用了同一个序号;想同时显示多条就用不同序号
点通知按钮没反应 App 已被关掉;本组件只在 App 运行时处理按钮
状态栏小图标是个方块 小图标要用白色透明底的简单图形
大图没显示 图片名或路径不对(读不到时照发文字通知并提示错误);下拉展开通知才看得到大图
想关掉 App 后按时提醒 本组件不支持;提醒只在 App 运行期间有效

平台说明

安卓与鸿蒙都支持;鸿蒙首次发通知时同样需要用户允许通知权限。媒体通知在鸿蒙接入系统播控中心,同样能退到后台继续播放。

完整 .aia 源码与操作指导

下载 .aia 源码

普通设备提醒、大图、带处理按钮及演示进度通知;另有真实离线音频与系统媒体控制闭环。通知ID201到204固定独立。首次发通知按系统提示授权;鸿蒙小图标与强调色由系统决定,Android可读取图片设置。发送调用无完成事件,必须在系统通知栏实际核对。

导入 LocalNotificationAllFeatures.aia,连接最新伴侣,或编译独立安装包。真机/伴侣运行尚未实测。

API / 功能 操作入口 预期结果
Show、ShowWithImage、ShowWithButtons、Clicked、ButtonClicked 三种发送入口201/202/203,展开通知后点击 实际系统通知与真实点击参数;拒绝权限后无通知时到系统设置恢复
ShowProgress、Cancel、CancelAll 本地演示进度、完成、单条取消、确认全部取消 明确标注模拟进度,不声称下载;204取消停止计时器,不再次发送
SmallIcon、Color、ShowPrevNext、Player读写及设计器配置 前后按钮开关后应用;绑定本案例播放器 播放器组件对象放入列表显示,不直接接到文本拼接积木;实际读取值;鸿蒙系统决定小图标与强调色,存值不表示视觉支持
ShowMedia、HideMedia、SetPlaying、MediaShowing、Playing 媒体显示、真实音频播放/暂停、关闭 播放器状态与媒体状态同时显示;关闭媒体会停止本案例音频
PlayClicked、PauseClicked、NextClicked、PreviousClicked 系统播控中心、通知栏或耳机真实操作 真实事件;绑定后播放暂停由组件控制,前后由本案例切换标题和重播
权限与空状态 拒绝后重新授权;未显示媒体时先播放 系统通知实际出现才算发送完成;组件没有发送成功事件

所有返回值均用于界面反馈,错误由底部错误区展示。设计器采用明确非默认配置,初始化与界面同步。API 覆盖检查按最终 AIA 检查方法、事件、属性读取与设置及设计器配置,不能替代真实设备验证。

设备提醒与媒体通知

导入方法:项目 → 导入项目(.aia)→ 选择下载的 .aia 源码文件。 普通设备提醒、大图、带处理按钮及演示进度通知;另有真实离线音频与系统媒体控制闭环。通知ID201到204固定独立。首次发通知按系统提示授权;鸿蒙小图标与强调色由系统决定,Android可读取图片设置。发送调用无完成事件,必须在系统通知栏实际核对。 覆盖检查 29/29。首次载入及保存重开均0个错误,真实后台导入、安装包编译通过;真机/伴侣/硬件联调尚未实测。全部属性读写、方法与事件的操作入口和预期结果见组件指导。

文档反馈