Android Notification 用法

来源:互联网 发布:retrofit2 json解析 编辑:程序博客网 时间:2024/06/06 09:01
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(); //关联IntentIntent 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;   //执行notificationmanager.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不同则全部可以点击;相同的话只有最新的一条可以点击,其他的不可点击)。

0 0