有关PendingIntent和Notification之间的数据传递与更新

[size=medium] 这段文章,主要是我在学习Android中遇到PendingIntent和Notification之间的数据的传递与更新[/size]
关于Notification的创建及使用,在这我就不讲了,网上很多。这里主要描述的是我在学习中遇到的一个问题,也许也有其他的人和我一样遇到这样的问题,所以分享一下。
问题描述:最近在做一个短信软件的练习,我使用一个BroadcastReceiver接收了系统收到的短信,然后在BroadcastReceiver的onReceive()方法中跳转到另一个活动中,并向该活动传入短信号码、短信内容参数。最后在该活动中启动一个Notification,用户点击这个Notification后就能跳转到相应的短信会话列表中。不过,因为由Notification启动的活动是在一个新的栈(Task)中的,所以每次跳转的号码总是第一次的那个号码。后来通过查看ApiDemos的代码,发现是因为getActivity(Context context, int requestCode, Intent intent, int flags)中的参数不对导致的,具体:
PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
new Intent(this,Conversation.class).setFlags (Intent.FLAG_ACTIVITY_NEW_TASK).putExtra("number", getIntent().getExtras().getString("number")).putExtra("name", "*!@*")
,[color=red]PendingIntent.FLAG_UPDATE_CURRENT[/color]);

问题就出在这第四个参数flags上,应使用PendingIntent.FLAG_UPDATE_CURRENT。
下面是我翻译的PendingIntent下几个常数:
int FLAG_CANCEL_CURRENT 在getActivity()、getBroadCast()、getService()等方法中使用的一个标记:假如所描述的PendingIntent已经存在,则在创建新的PendingIntent之前,将会取消旧的PendingIntent。
int FLAG_NO_CREATE 在getActivity()、getBroadCast()、getService()等方法中使用的一个标记:假如所描述的PendingIntent已经存在,则只是简单的返回null,而不去创建新的PendingIntent对象。
int FLAG_ONE_SHOT 在getActivity()、getBroadCast()、getService()等方法中使用的一个标记:这个PendingIntent对象将只能被使用一次。
int FLAG_UPDATE_CURRENT 在getActivity()、getBroadCast()、getService()等方法中使用的一个标记:假如所描述的PendingIntent已经存在,则该PendingIntent将被保留下来,不过其中的extra数据将会被新的PendingIntent中的extra数据所替代。

你可能感兴趣的:(Android_笔记)