android notification,notificationmanager详解

须知少年凌云志,曾许人间第一流。这篇文章主要讲述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());


android notification,notificationmanager详解

文章图片
android notification,notificationmanager详解

文章图片


源码: http://download.csdn.net/detail/xiangzhihong8/9639345


【android notification,notificationmanager详解】


    推荐阅读