android notification,notificationmanager详解
我们知道在使用Android的通知的时候一定会用到NotificationManager 、 Notification这两个类,这两个类的作用分别是:
NotificationManager : 是状态栏通知的管理类,负责发通知、清楚通知等。
Notification:状态栏通知对象,可以设置icon、文字、提示声音、振动等等参数。
这里需要声明一点,由于Android的系统升级,Android在通知这块也有很多老的东西被抛弃了,一个是api11的版本,一个是api16的版本。我们来比较下api11之前的用法这是通用的:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // 下面需兼容Android 2.x版本是的处理方式 Notification notify1 = new Notification(); notify1.icon = R.drawable.message; notify1.tickerText = "TickerText:您有新短消息,请注意查收!"; notify1.when = System.currentTimeMillis(); notify1.setLatestEventInfo(this, "Notification Title", "This is the notification message", pendingIntent); notify1.number = 1; notify1.flags |= Notification.FLAG_AUTO_CANCEL; manager.notify(NOTIFICATION_FLAG, notify1);
api11-api16的用法是这样的(主要是新增了自定义通知图标,并且通知的构造方式也发生了改变)
PendingIntent pendingIntent2 = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // API11之后才支持 Notification notify2 = new Notification.Builder(this) .setSmallIcon(R.drawable.message) .setTicker("TickerText:" + "您有新短消息,请注意查收!") .setContentTitle("Notification Title") .setContentText("This is the notification message") .setContentIntent(pendingIntent2) .setNumber(1) .getNotification(); // 需要注意build()是在API level // 16及之后增加的,在API11中可以使用getNotificatin()来代替 notify2.flags |= Notification.FLAG_AUTO_CANCEL; manager.notify(NOTIFICATION_FLAG, notify2);
api16之后
PendingIntent pendingIntent3 = PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0); // API16之后才支持 Notification notify3 = new Notification.Builder(this) .setSmallIcon(R.drawable.message) .setTicker("TickerText:" + "您有新短消息,请注意查收!") .setContentTitle("Notification Title") .setContentText("This is the notification message") .setContentIntent(pendingIntent3).setNumber(1).build(); notify3.flags |= Notification.FLAG_AUTO_CANCEL; // FLAG_AUTO_CANCEL表明当通知被用户点击时,通知将被清除。 manager.notify(NOTIFICATION_FLAG, notify3);//关联通知
我们这里讲的主要是api16之后的使用方法
首先我们通过系统的Service获取NotificationManager对象,然后通过他将消息发送给系统,获取方法如下:
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
Notification主要包含以下参数:
- An icon (通知的图标)
- A title and expanded message (通知的标题和内容)
- A
PendingIntent (点击通知执行页面跳转)
使用流程:
1、创建NotificationManager
通过NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);获取NotificationNotificationManager 消息管理类,
2,创建Notification实体
通过Notification.Builder builder = new Notification.Builder(this);创建一个通知的实体,里面可以包含很多的参数,如通知的Icon,消息内容,跳转等。
3,通过notificationManager.notify(0, builder.build());将消息绑定,里面会用到NotificationService(这里不做讲解)
普通通知
Notification.Builder builder = new Notification.Builder(this); Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/xiangzhihong8")); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); builder.setContentIntent(pendingIntent); builder.setSmallIcon(R.drawable.lanucher); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.lanucher)); builder.setAutoCancel(true); builder.setContentTitle("普通通知"); builder.setContentText("您有新短消息,请注意查收"); notificationManager.notify(0, builder.build());
折叠式通知
我们还可以通过RemoteViews(这里就是桌面小控件的实现,不知道大家是否还有印象)
Notification.Builder builder = new Notification.Builder(this); Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/itachi85/")); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); builder.setContentIntent(pendingIntent); builder.setSmallIcon(R.drawable.foldleft); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.lanucher)); builder.setAutoCancel(true); builder.setContentTitle("折叠菜单"); builder.setContentText("您有新短消息,请注意查收"); //用RemoteViews来创建自定义Notification视图 RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.view_fold); Notification notification = builder.build(); //指定展开时的视图 notification.bigContentView = remoteViews; notificationManager.notify(1, notification);
自定义通知
Notification.Builder builder = new Notification.Builder(this); Intent mIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://blog.csdn.net/xiangzhihong8")); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, mIntent, 0); builder.setContentIntent(pendingIntent); builder.setSmallIcon(R.drawable.foldleft); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.icon)); builder.setAutoCancel(true); builder.setContentTitle("自定义菜单"); builder.setContentText("您有新短消息,请注意查收"); //设置点击跳转 Intent hangIntent = new Intent(this,NotificationActivity.class); hangIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); PendingIntent hangPendingIntent = PendingIntent.getActivity(this, 0, hangIntent, PendingIntent.FLAG_CANCEL_CURRENT); builder.setFullScreenIntent(hangPendingIntent, true); notificationManager.notify(2, builder.build());
源码:http://download.csdn.net/detail/xiangzhihong8/9639345
android notification,notificationmanager详解的更多相关文章
- Android Notification通知详解
根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面把notification放在通知栏里,再此显示时 ...
- Android Studio 插件开发详解二:工具类
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112856 本文出自[赵彦军的博客] 在插件开发过程中,我们按照开发一个正式的项 ...
- android:ToolBar详解
android:ToolBar详解(手把手教程) 泡在网上的日子 发表于 2014-11-18 12:49 第 124857 次阅读 ToolBar 42 来源 http://blog.mosil.b ...
- Android之canvas详解
首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...
- 【转】Android Canvas绘图详解(图文)
转自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html Android Canvas绘图详解(图文) 泡 ...
- Android 核心分析 之八Android 启动过程详解
Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...
- Android GLSurfaceView用法详解(二)
输入如何处理 若是开发一个交互型的应用(如游戏),通常需要子类化 GLSurfaceView,由此可以获取输入事件.下面有个例子: java代码: package eoe.ClearTes ...
- Android编译过程详解(一)
Android编译过程详解(一) 注:本文转载自Android编译过程详解(一):http://www.cnblogs.com/mr-raptor/archive/2012/06/07/2540359 ...
- android屏幕适配详解
android屏幕适配详解 官方地址:http://developer.android.com/guide/practices/screens_support.html 一.关于布局适配建议 1.不要 ...
- Android.mk文件详解(转)
源:Android.mk文件详解 从对Makefile一无所知开始,折腾了一个多星期,终于对Android.mk有了一个全面些的了解.了解了标准的Makefile后,发现Android.mk其实是把真 ...
随机推荐
- win10利用自带的IIS搭建ftp遇到瓶颈,离线求解!!!
- 将一个div置于另一个div之上
div piao置于div bg之上 <div class="bg"> <div class="piao" style="backg ...
- ajax 304 bug处理方法
在ie内核中,发现Ajax的请求不会真正的被发送到服务器端,返回的永远是304.这个应该是IE的设计问题,查询解决方法后,看到网上的一段话: "因为ajax请求的时候如果使用get方式请求, ...
- Windows无法安装到这个磁盘
今天手动装系统的时候出现以下这样的错误, 请看图: 进入BIOS F9 Setup Defaults ,初始化恢复 1.在进行windows安装分区时, 磁盘分区界面无法继续进行,出现" ...
- 上篇:python的基本数据类型以及对应的常用方法(数字、字符串、布尔值)
为了日后便于查询,本文所涉及到的必记的基本字符串方法如下: "分隔符".join(字符串) #将字符串的每一个元素按照指定分隔符进行拼接.split("字符串&qu ...
- 重置winsock目录解决不能上网的问题
摘自:http://www.52microsoft.com/netsh-winsock-reset/ 有时候,我们会遇到能成功连接网络但是却无法上网的问题.屏幕右下角系统托盘中的网络连接图标显示正常, ...
- south 命令学习
south 命令学习 概述 在django某个版本之前,django自身提供一个创建数据库的命令-syncdb,它会根据model来创建相应的表,但是这个命令不好的地方在于,如果想要对model进行更 ...
- matlab sparse函数和full函数用法详解(转)
sparse函数 功能:Create sparse matrix-创建稀疏矩阵 用法1:S=sparse(X)--将矩阵X转化为稀疏矩阵的形式,即矩阵X中任何零元素去除,非零元素及其下标(索引)组成矩 ...
- leetcode刷题笔记326 3的幂
题目描述: 给出一个整数,写一个函数来确定这个数是不是3的一个幂. 后续挑战:你能不使用循环或者递归完成本题吗? 题目分析: 既然不使用循环或者递归,那我可要抖机灵了 如果某个数n为3的幂 ,则k=l ...
- Android需求之点击跳转至市场评价
相信大家都看过APP上有一个选项"喜欢此APP?还希望您评价一下吧!",然后点击弹出选择框让你选择一个市场如: 安智市场,百度应用,豌豆荚-.然后选择其中一个后就跳转至此市场你的A ...