notification在网上能搜索到很多,但是有时候时间长不用就会忘记,为了以后用到时能直接用在此写下notification的用法。
大概步骤只有这4步:
1. 得到NotificationManager对象
2. 建立Notification对象
3. 关联点击notification跳转的Intent对象
4. 执行
1.自定义notification
//得到NotificationManager对象
NotificationManager manager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//建立Notification对象
Notification myNotify = new Notification();
//关联Intent
Intent intent = new Intent(this,TestDate.class);
intent.putExtra("test", "ceshi");
PendingIntent contentIntent = PendingIntent.getActivity(this,1,intent, 1);
//myNotify.contentIntent = contentIntent; //这一行代码放在下面代码设置属性中(这一行是notification关联Intent)
//设置notification的属性
myNotify.icon = R.drawable.ic_launcher;
myNotify.tickerText = "新消息来啦";
myNotify.when = System.currentTimeMillis();
myNotify.flags = Notification.FLAG_NO_CLEAR;//不能左滑清除
myNotify.contentIntent = contentIntent;
//自定义notification布局
RemoteViews rv = new RemoteViews(getPackageName(),R.layout.notification);
rv.setTextViewText(R.id.text, "消息内容");
rv.setImageViewResource(R.id.imageview,R.drawable.ic_launcher);
myNotify.contentView = rv;
//执行notification
manager.notify(1, myNotify);
//跳转到TestDate(Activity)
if(getIntent()!=null && getIntent().getExtras()!=null && getIntent().getExtras().containsKey("test")){
String str=getIntent().getExtras().getString("test");//点击notification得到的数据
}
2.系统notification
//得到NotificationManager对象
NotificationManager manager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
//关联点击notification跳转的Intent对象
Intent intent = new Intent(this,TestDate.class);
intent.putExtra("test", "ceshi");
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent , 0);
//建立Notification对象
Notification notify = new Notification.Builder(this)
.setSmallIcon(R.drawable.ic_launcher)
.setTicker("新消息来啦")
.setContentTitle("notification标题")
.setContentText("notification内容")
.setContentIntent(pendingIntent)
.setWhen(System.currentTimeMillis());
.setNumber(1)
.build();
notify.flags=Notification.FLAG_AUTO_CANCEL;//用户点击或者左滑notification可以消失
//执行
manager.notify(1, notify);
//跳转到TestDate(Activity)
if(getIntent()!=null && getIntent().getExtras()!=null && getIntent().getExtras().containsKey("test")){
String str=getIntent().getExtras().getString("test");//点击notification得到的数据
}
上面的代码基本已经实现notification,但是我们发现连续点击执行notification时,通知栏只会有一个notification,接下来就来解决这个问题
分为3中情况:注意观察PendingIntent 中第二个参数以及执行通知中manager.notify(1, notification);第一个参数
1执行多次通知栏永远只会显示一条
int count++;
//得到NotificationManager对象
NotificationManager manager=(NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
//定义notification
Notification notification=new Notification(R.drawable.ic_launcher,"新消息来了",System.currentTimeMillis());
notification.flags=Notification.FLAG_AUTO_CANCEL;//是否能删除
notification.number=count;
//通知消息与Intent关联
Intent intent=new Intent(MainActivity.this,TestDate.class);
intent.putExtra("test", "ceshi"+count);
PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, 10, intent, PendingIntent.FLAG_CANCEL_CURRENT);//具体的通知内容
notification.setLatestEventInfo(MainActivity.this, "标题", "执行多次通知只显示一条",pendingIntent );
//执行通知
manager.notify(1,notification);
//跳转到TestDate(Activity)
if(getIntent()!=null && getIntent().getExtras()!=null && getIntent().getExtras().containsKey("test")){
String str=getIntent().getExtras().getString("test");//点击notification得到的数据
}
这是因为manager.notify(1,notification)的requestCode(第一个参数)全相同导致的。
2执行多次通知,并且显示多条,但只能用最新的一条跳转至活动
int count++;
//得到NotificationManager对象
NotificationManager manager=(NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
//定义notification
Notification notification=new Notification(R.drawable.ic_launcher,"新消息来了",System.currentTimeMillis());
notification.flags=Notification.FLAG_AUTO_CANCEL;//是否能删除
notification.number=count;
//通知消息与Intent关联
Intent intent=new Intent(MainActivity.this,TestDate.class);
intent.putExtra("test", "ceshi"+count);
PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, 10, intent, PendingIntent.FLAG_CANCEL_CURRENT);//具体的通知内容
notification.setLatestEventInfo(MainActivity.this, "标题", "执行多次通知只显示一条",pendingIntent );
//执行通知
manager.notify(count,notification);
//跳转到TestDate(Activity)
if(getIntent()!=null && getIntent().getExtras()!=null && getIntent().getExtras().containsKey("test")){
String str=getIntent().getExtras().getString("test");//点击notification得到的数据
}
这是因为PendingIntent的requestCode(第二个参数)全相同导致的。
3 执行多次通知,并且显示多条,每一条通知都能跳转至对应的活动
int count++;
//得到NotificationManager对象
NotificationManager manager=(NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
//定义notification
Notification notification=new Notification(R.drawable.ic_launcher,"新消息来了",System.currentTimeMillis());
notification.flags=Notification.FLAG_AUTO_CANCEL;//是否能删除
notification.number=count;
//通知消息与Intent关联
Intent intent=new Intent(MainActivity.this,TestDate.class);
intent.putExtra("test", "ceshi"+count);
PendingIntent pendingIntent =PendingIntent.getActivity(MainActivity.this, count, intent, PendingIntent.FLAG_CANCEL_CURRENT);//具体的通知内容
notification.setLatestEventInfo(MainActivity.this, "标题", "执行多次通知只显示一条",pendingIntent );
//执行通知
manager.notify(count,notification);
//跳转到TestDate(Activity)
if(getIntent()!=null && getIntent().getExtras()!=null && getIntent().getExtras().containsKey("test")){
String str=getIntent().getExtras().getString("test");//点击notification得到的数据
}
这是因为manager.notify(count,notification)的requestCode(第一个参数)和PendingIntent的requestCode(第二个参数)每次都不相同导致的。
总结:通俗的讲,manager.notify(count,notification)的requestCode(第一个参数)是指通知栏notification是否可以显示多条(每次的requestCode不同则可以显示多条),PendingIntent的requestCode(第二个参数)是指每一个nitification是否可点击(每次的requestCode不同则全部可以点击;相同的话只有最新的一条可以点击,其他的不可点击)。