Android 通知栏 PendingIntent.getActivity(context, requestCode, intent, flags);参数详解
2017-01-18 13:05
886 查看
写这个博客的原因是,我曾在项目中被Android通知栏坑了好久。由于个人能力的原因,以及其他原因,一直拖了好久,才解决。
不知道大家有没有遇到过这种问题:
通过下面的方法创建三个通知:
通知如图所示:
当我分别点击这三个通知,效果如下所示:
大家看出来问题了吧,点击进去之后,在TestActivity类里面,通过下面的方法获取到的值都是一样的,而且都是:通知3,
这个问题是怎么产生的呢?原因是:PendingIntent.getActivity(context, 0, perIntent,
PendingIntent.FLAG_UPDATE_CURRENT);这句话的第二个参数 requestCode,我设置的值:0,由于我创建的三个通知,requestCode值相同,并且第四个参数PendingIntent.FLAG_UPDATE_CURRENT,导致后创建的通知会更新之前的通知的perIntent参数,因此每次点击通知后,获取到的参数永远是最后的那个。
解决方法:PendingIntent.getActivity(context, requestCode, perIntent,
PendingIntent.FLAG_UPDATE_CURRENT);,设置requestCode为不同的值,就行了,在高手眼中可能很简单,但是对于新手来说,却是很头疼的坑。
现在重新运行程序,你会发现达到了我们的预期效果
不知道大家有没有遇到过这种问题:
通过下面的方法创建三个通知:
public void notify(String desc) { Intent perIntent = new Intent(context, TestActivity.class); perIntent.putExtra("desc", desc); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, perIntent, PendingIntent.FLAG_UPDATE_CURRENT); // 创建一个通知 Notification.Builder builder = new Notification.Builder(context); builder.setSmallIcon(R.drawable.ic_launcher)// .setContentText(desc)// .setContentTitle(desc)// .setTicker(desc)// .setContentIntent(pendingIntent)// .setShowWhen(false);// Notification notification = null; notification = builder.build(); notification.flags |= Notification.FLAG_AUTO_CANCEL; nManager.notify(notifyId++, notification);// id是应用中通知的唯一标识 }
通知如图所示:
当我分别点击这三个通知,效果如下所示:
大家看出来问题了吧,点击进去之后,在TestActivity类里面,通过下面的方法获取到的值都是一样的,而且都是:通知3,
descText.setText(getIntent().getStringExtra("desc"));
这个问题是怎么产生的呢?原因是:PendingIntent.getActivity(context, 0, perIntent,
PendingIntent.FLAG_UPDATE_CURRENT);这句话的第二个参数 requestCode,我设置的值:0,由于我创建的三个通知,requestCode值相同,并且第四个参数PendingIntent.FLAG_UPDATE_CURRENT,导致后创建的通知会更新之前的通知的perIntent参数,因此每次点击通知后,获取到的参数永远是最后的那个。
解决方法:PendingIntent.getActivity(context, requestCode, perIntent,
PendingIntent.FLAG_UPDATE_CURRENT);,设置requestCode为不同的值,就行了,在高手眼中可能很简单,但是对于新手来说,却是很头疼的坑。
现在重新运行程序,你会发现达到了我们的预期效果
源码下载:
http://download.csdn.net/download/waa_0618/9740491相关文章推荐
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- android 通知覆盖以及PendingIntent参数问题
- Android中的context、activity、intent、service使用详解
- android PendingIntent 使用通知传递多个参数,及不覆盖的问题
- Android 通知PendingIntent意图打开Activity,数据无更新? 解决方法
- Android消息通知PendingIntent传递参数出问题
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android notification点击跳转到Activity,点击返回跳转,前一条消息目标Intent的值不被后面的消息覆盖,getActivities第二个参数必须区分开来
- PendingIntent android.app.PendingIntent.getActivity的使用
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- PendingIntent.getBroadcast第四个参数flags
- Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
- [转载]android activity lanchmode和intent Flags 以及task
- 关于android中PendingIntent.getBroadcase的注册广播VSAlarmManager .cancle(PendingIntent)如何区分PendingIntent
- Android的上下文环境Activity的this和getApplicationContext的区别
- 关于android中PendingIntent.getBroadcase的注册广播
- Android PendingIntent详解
- Android 中的context, service,active和intent使用详解