Android Notification 用法

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不同则全部可以点击;相同的话只有最新的一条可以点击,其他的不可点击)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值