关于在接收推送消息后PendingIntent传参问题

来源:互联网 发布:淘宝的商品类目 编辑:程序博客网 时间:2024/05/21 17:55

一般接收到推送消息通过PendingIntent设置跳转到指定的Activity,同时也肩负着传值的使命,下面详细讲解下PendingIntent创建的参数吧:

假如我们这样创建:

Intent intent = new Intent(context,mainActivity.class);

PendingIntent  pi = PendingIntent.getActivity(context,id,intent,flag);

这里有4个参数,其中第一个的context和第三个intent就不做多说了,大家一看就明白;

首先来说一下最后一个flag参数,分别是:

int FLAG_CANCEL_CURRENT:如果该PendingIntent已经存在,则在生成新的之前取消当前的,也就是说只有最后的PendingIntent有效,之前的都无效。

int FLAG_NO_CREATE:如果该PendingIntent不存在,直接返回null而不是创建一个PendingIntent.

int FLAG_ONE_SHOT:该PendingIntent只能用一次,在send()方法执行后,自动取消。

int FLAG_UPDATE_CURRENT:如果该PendingIntent已经存在,则用新传入的Intent更新当前的数据。

由以上四个flag可以看出,如果我们想通过PendingIntent传值,并且每次传值都不同的话,就应该使用FLAG_UPDATE_CURRENT,但是这时不要忘记第二个参数,

假设第二个参数id为常量,比如0,那么所对应的Intent里面的extra的内容将更新为最新,也就是说所以的数据都是最新的;相反如果每次的id值不同,则Intent里面内

容不会被更新,所以要使你的Intent里面的内容不同就应该保持第二个参数每次都不相同。


同样在做项目过成功,发现通过PendingIntent能传递不同的值,但是再将得到的值通过intent传递给,以singTask方式启动的Activity时,在此Activity已经启动的情况下获得

不到由新Intent传递过来的值,每次在onResume中都是获得到之前的intent,为了解决这个问题,就必须了解4种启动方式的区别,这里就不再多说了,总之为了解决获得最新

的Intent的问题,总结下activity通过intent传递数据的时候,如果activity未启动,那么在这个刚启动的activity里通过getIntent()会获取到这个intent的数据.如果要启动的activity是

已经存在的,这时候通过getInten()方法获取到的intent是已启动的activity的原始intent.换句话说intent的数据没有更新.这样在已启动的activity里拿到的intent的数据是旧数据.如

果要每次获取intent传来的新数据就需要在onNewIntent(Intent intent)方法里调用setIntent(intent)设置这个传来的最新的intent.




0 0