Android API Level在11前后及16之后时Notification的不同用法
作为刚入门Android的小白,最近在按照郭大神的《第一行代码》在练习,在用到Notification时遇到了一些问题,网上资料比较零散,我这里做了一个总结分析给各位,若有错误,恳请指正~
Notification是一种具有全局效果的通知,程序一般通过NotificationManager服务来发送Notification。
Notification支持文字内容显示、震动、三色灯、铃声等多种提示形式,在默认情况下,Notification仅显示消息标题、消息内容、送达时间这3项内容。
以下就是通知的基本布局:

不同API level的区别主要是Notification的构造方法、得到实例的方法,这里顺便总结一下Notification的用法,按照步骤分别给出不同API level下的做法:
1、获取Notification管理器
NotificationManager noteManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
获取管理器的方式都一样,没有改变。
2、新建一个Notification,设置状态栏显示样式
这里只列举了最简单的样式设置,具体的大家可以参考API文档。
// API Level < 11 (Android 3.0)
Notification notification = new Notification(
R.mipmap.ic_launcher, "This is ticker text",
System.currentTimeMillis());
API<11时,可以直接用Notification的构造方法新建一个Notification,十分方便。
ps:我用的IDE是AndroidStudio,所以icon的id是R.mipmap.***。
// API Level >= 11 (Android 3.0) && API Level < 16 (Android 4.1)
Notification.Builder builder = new Notification.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setTicker("This is ticker text")
.setWhen(System.currentTimeMillis());
Notification note = builder.getNotification(); // 调用getNotification()来生成Notification
API>11后,就要用Notification.Builder()来代替了,官方API是这样说的:
Notification(int icon, CharSequence tickerText, long when)
Notification.Builder instead.NotificationCompat.Builder, available in the Android Support library.//API Level >= 4 (Android 1.6) && API Level < 16 (Android 4.1)
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setTicker("This is ticker text")
.setWhen(System.currentTimeMillis());
Notification note =builder.getNotification(); //调用builder.getNotification()来生成Notification
因此推荐用NotificationCompat.Builder这种方式。
注意到我在注释里写的 "&& API Level < 16 (Android 4.1)" 了吗?这是因为在Google官方API文档上是这么说的:
public Notification getNotification () Added in API level 11
This method was deprecated in API level .
Use build() instead
因此,当API>=16即Android4.1之后,就要用build()来代替了,使用方法一样,在此就不赘述了。
3、设置Notification的触发事件
点击Notification后,一般都是触发一个新的Activity:
Intent intent = new Intent(this, AnotherActivity.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_CANCEL_CURRENT);
这里不同API版本都一样。
4、设置Notification在通知栏里的样式
// API Level < 11 (Android 3.0)
note.setLatestEventInfo(this, "This is content title", "This is content text", pi);
API<11时,调用的是Notification类的setLatestEventInfo方法。
// API Level >= 11 (Android 3.0)
builder.setContentIntent(pi)
.setContentTitle("This is content title")
.setContentText("This is content text");
而当API>=11时,设置通知栏中的样式是调用Builder的setContentIntent方法,设置好之后在调用build()方法生成Notification实例。
类似的,NotificationCompat.Builder也是调用同样的方法,这里就不赘述了。
5、发布该Notification
第一个参数为该notification的ID
noteManager.notify(1, note);
总结一下:
低版本(API低于11、16)中的部分方法已经被弃用:
(1)Notification.Builder(this).getNotification()
(2)mNotification.setLatestEventInfo(this, "title", "content", null);
建议开发过程中尽量使用NotificationCompat.Builder(this)的构建方法去创建一个通知类。
Android API Level在11前后及16之后时Notification的不同用法的更多相关文章
- Call requires API level 21(Current min is 16)
Call requires API level 21(Current min is 16) Android开发中,遇到类似这种问题,如何处理? 一种办法是提升sdk最低版本到21,在Android s ...
- Android api level对照表
转自:blog.csdn.net/lihenair/article/details/49869299 Platform Version API Level VERSION_CODE Notes And ...
- Android API level 版本对应关系
详情地址:http://developer.android.com/guide/topics/manifest/uses-sdk-element.html Platform Version API L ...
- Android API level 与version对应关系
https://www.cnblogs.com/jinglecode/p/7753107.html Platform Version API Level VERSION_CODE 中文名称 Andro ...
- android api level对应表(copy)
Platform Version API Level VERSION_CODE Notes Android 4.4 19 KITKAT Platform Highlights Android 4.3 ...
- Android API Level与sdk版本对照表
API等级1: Android 1.0 API等级2: Android 1.1 Petit Four 花式小蛋糕 API等级3: Android 1.5 Cupcake 纸杯蛋糕 API等级4: An ...
- Android API Guides 学习笔记---Application Fundamentals(一)
今天开始学习google官网上的API guides ,主要读了Application Fundamentals这一章节,此章节介绍了一个App的基本组成,共包括四大部分内容. 1. App ...
- Android Call requires API level 11 (current min is 8)的解决方案
[错误描述] 在用Eclipse开发过程中,为了兼容Android2.2和4.0以上版本,我在使用Notification类时做了2个版本的代码,代码根据系统版本不同执行相应模块,结果,等我输完代码, ...
- Android版本和API Level对应关系
http://developer.android.com/guide/topics/manifest/uses-sdk-element.html Platform Version API ...
随机推荐
- uva 10026 Shoemaker's Problem _贪心
题意:鞋匠现在有n个工作要做,每个工作要x天,没延迟一天需要付款y,鞋匠每天只能做一个工作,问使得鞋匠最少赔款的工作顺序. 思路:工作和工作之间排序,如果a.value*b.day>b.valu ...
- js 跨域访问
错误log : XMLHttpRequest cannot load http://192.168.17.131:8080/wm/topology/links/json. No 'Access-Co ...
- [置顶] Codeforces Round #190 (Div. 2)(完全)
好久没有写博客了,一直找不到有意义的题可以写,这次也不算多么有意义,只是今天是比较空的一天,趁这个时候写一写. A. B. 有一点贪心,先把每个拿去3的倍数,余下0或1或2,然后三个一起拿. 对于以上 ...
- 7-05. 魔法优惠券(25) (数学 ZJU_PAT)
题目链接:http://www.patest.cn/contests/ds/7-05 在火星上有个魔法商店,提供魔法优惠券.每一个优惠劵上印有一个整数面值K,表示若你在购买某商品时使用这张优惠劵.能够 ...
- win7启动后报丢失nscmk.dll解决解决方式
1.根据当前计算机选择下载64位或者32位nscmk.dll 2.拷贝nscmk.dll到相路径(32位:%windir%\system32\:64位:%windir%\SysWOW64\nscmk. ...
- SQL Common Sense 碎片一
1.关于时间 SELECT GETDATE() SELECT DATEPART(d,'2014-05-20 14:20:55.347') SELECT DATEDIFF(d,'2014-05-20 1 ...
- ios消息的交互方式
注意这些都是界面回传(即从第二个界面传到第一个界面,从第一个界面传到第二个界面的时候用第二个界面的属性即可) iOS消息的交互方式有4种,分别为:通知,代理,block,kvo 现在我们对这个4中 ...
- Node.js学习系列1
概述 最近在刷javascript的技能,觉着nodejs是个不错的入口,作为一个.Net平台的前端工程师学习使用js开发服务端,想想都有点小激动哈哈^_^^_^. 入门 之前开发过ionic,所以对 ...
- 使用cvReleaseImage()释放图像出错
前几天用opencv写程序的时候,在用cvReleaseImage()函数释放cvLoadImage()加载的图像的时候出错,如下所示: IplImage *src = cvLoadImage(fil ...
- phpcms 任意位置获取用户头像
主要拿到userid $_username = param::get_cookie('_username');//当前登录人用户名 $_userid = param::get_cookie('_use ...