须知少年凌云志,曾许人间第一流。这篇文章主要讲述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中样式和自定义button样式
- android 热修补之andfix实践
- Android复习资料
- Android热修复技术专题(来自微信淘宝支付宝QQ空间的热修复方案)
- Android App 优化之消除卡顿
- WmS详解之如何理解Window和窗口的关系(基于Android7.0源码)
- Android Meun 用法
- Android SDK国内代理速度还可以
- 第三方框架之ThinkAndroid 学习总结