本地通知使用指导
本地通知在手机顶部的通知栏发通知,由 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 源码与操作指导
普通设备提醒、大图、带处理按钮及演示进度通知;另有真实离线音频与系统媒体控制闭环。通知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个错误,真实后台导入、安装包编译通过;真机/伴侣/硬件联调尚未实测。全部属性读写、方法与事件的操作入口和预期结果见组件指导。
扫码添加客服咨询