Android Notification基本使用

基础用途概述

Notification,是一种具有全局效果的通知,可以在系统的通知栏中显示。当 APP 向系统发出通知时,它将先以图标的形式显示在通知栏中。用户可以下拉通知栏查看通知的详细信息。通知栏和抽屉式通知栏均是由系统控制,用户可以随时查看。

通知与四大组件的关系:

比如音乐播放器中,后台播放音乐,由于 service 是在后台运行,所以意图做什么我们看不到,这个时候可以通过 Notificaiton 来显示提醒。

同样,在音乐播放器中,程序在后台运行,点击音乐播放器的通知栏上的上一曲,下一曲等,那么可以让 service 服务和 BroadcastReceiver 广播相结合

Intent 作为意图处理,和 Notificaiton 的点击时间紧密结合在了一起,并且与 BroadcastReceiver 和 service 的联系也紧密不可以分割。

(service 在后台之后通过 BroadcastReceiver 来通知 Notificaiton 显示相关东西,在通过 Intent 完成用户的意图操作)

常见的用途:

1 显示接收到短消息、及时消息等信息(如QQ、微信、新浪、短信)

2 显示客户端的推送消息,如广告、优惠、版本更新、推荐新闻等,常用的第三方 SDK 有: JPush 、 个推 、 信鸽 、 网易云信(偏重 IM ) 、 阿里云推送

3 显示正在进行的事物,例如:后台运行的程序,如音乐播放进度、下载进度等

Notification的基本使用

通知栏主要的类:Notification 和 NotificationManager

NotificationManager :  是状态栏通知的管理类,负责发通知、清除通知等操作。

Notification 为通知信息类,它里面对应了通知栏的各个属性【备注:使用建造者模式构建 Notification 对象。由于 Notification.Builder 仅支持 Android 4.1及之后的版本,为了解决兼容性问题, Google 在 Android Support v4 中加入了 NotificationCompat.Builder 类。

Notification创建必要的属性,必须添加的属性:

小图标,通过 setSmallIcon() 方法设置

标题,通过 setContentTitle() 方法设置

内容,通过 setContentText() 方法设置

Notification 创建步骤:

Notification 的创建主要涉及到 Notification.Builder 、Notification 、NotificationManager。

Notification.Builer : 使用建造者模式构建 Notification 对象。由于 Notification.Builder 仅支持 Android 4.1及之后的版本,为了解决兼容性问题, Google 在 Android Support v4 中加入了 - NotificationCompat.Builder 类。对于某些在 Android 4.1 之后才特性,即使 NotificationCompat.Builder 支持该方法,在之前的版本中也不能运行。

Notification : 通知对应类,保存通知相关的数据。

NotificationManager : NotificationManager 是通知管理类,向系统发送通知时会用到。它是一个系统服务。调用 NotificationManager 的 notify() 方法可以向系统发送通知。

Notification 创建代码:

1 创建NotificationManager

创建NotificationManager

2 创建Notification.Builder,使用的是建造者模式

创建Notification.Builder

3 创建PendingIntent,处理点击通知之后的逻辑

创建PendingIntent

4 给Notification.Builder设置PendingIntent,然后发送通知

发送通知

Notification自定义布局(RemoteViews)

1 创建RemoteViews,并设置点击监听

创建RemoteViews

根据requestCode创建PendingIntent

2 把通知栏布局设置为remoteViews,就完成了自定义通知栏

设置通知栏布局

Notification细节

更新 Notification

更新通知很简单,只需要再次发送相同 ID 的通知即可,如果之前的通知还未被取消,则会直接更新该通知相关的属性;如果之前的通知已经被取消,则会重新创建一个新通知。

更新通知跟发送通知使用相同的方式。

取消 Notification

点击通知栏的清除按钮,会清除所有可清除的通知

设置了 setAutoCancel() 或 FLAG_AUTO_CANCEL 的通知,点击该通知时会清除它

通过 NotificationManager 调用 cancel(int id) 方法清除指定 ID 的通知

通过 NotificationManager 调用 cancel(String tag, int id) 方法清除指定 TAG 和 ID 的通知

通过 NotificationManager 调用 cancelAll() 方法清除所有该应用之前发送的通知

注意事项

如果你是通过 NotificationManager.notify(String tag, int id, Notification notify) 方法创建的通知,那么只能通过 NotificationManager.cancel(String tag, int id) 方法才能清除对应的通知,调用NotificationManager.cancel(int id) 无效。

设置 flag 属性

设置 FLAG_NO_CLEAR 表示设置通知不能被状态栏的清除按钮给清除掉,也不能被手动清除,但能通过 cancel() 方法清除notification.flags |= Notification.FLAG_NO_CLEAR;

取消全部通知:

if(mNotificationManager!=null){

   mNotificationManager.cancelAll();

}

设置 Notification 的通知效果

Notification 有震动、响铃、呼吸灯三种响铃效果,可以通过 setDefaults(int defualts) 方法来设置。 Default 属性有以下四种,一旦设置了 Default 效果,自定义的效果就会失效。

//设置系统默认提醒效果,一旦设置默认提醒效果,则自定义的提醒效果会全部失效。具体可看源码//添加默认震动效果,需要申请震动权限//

Notification.DEFAULT_VIBRATE

//添加系统默认声音效果,设置此值后,调用setSound()设置自定义声音无效

Notification.DEFAULT_SOUND

//添加默认呼吸灯效果,使用时须与 Notification.FLAG_SHOW_LIGHTS 结合使用,否则无效

Notification.DEFAULT_LIGHTS

//添加上述三种默认提醒效果

Notification.DEFAULT_ALL

除了以上几种设置 Notification 默认通知效果,还可以通过以下几种 FLAG 设置通知效果。

//提醒效果常用 Flag//三色灯提醒,在使用三色灯提醒时候必须加该标志符

Notification.FLAG_SHOW_LIGHTS

//发起正在运行事件(活动中)

Notification.FLAG_ONGOING_EVENT

//让声音、振动无限循环,直到用户响应 (取消或者打开)

Notification.FLAG_INSISTENT

//发起Notification后,铃声和震动均只执行一次

Notification.FLAG_ONLY_ALERT_ONCE

//用户单击通知后自动消失

Notification.FLAG_AUTO_CANCEL

//只有调用NotificationManager.cancel()时才会清除

Notification.FLAG_NO_CLEAR

//表示正在运行的服务

Notification.FLAG_FOREGROUND_SERVICE

写在最后

android o和android p对通知栏的改动频繁,如需适配可以查阅官方文档。

http://developer.android.com/design/patterns/notifications.html

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容