有几天我遇到了一个我无法解决的问题,我有一个应用程序通过GCM收到通知,直到一切顺利,我的消息通知。但问题是当我点击我的通知并且它的有效性打开时,getStringExtra()函数经常向我发送与我之前的通知相同的事情,当我的通知消息发生变化时。
为了更好地了解通知到达服务时的处理方式:
private void sendNotification(String greetMsg) {
String sMsg = "";
String sNotifMsg = "";
int iTypeNotif=0;
Date now = new Date();
notifyID = now.getTime();
Intent resultIntent = new Intent(this, NotifAcitivity.class);
resultIntent.putExtra("greetjson", greetMsg); // HERE I HAVE GIVE THE MESSAGE
resultIntent.setAction(String.valueOf(notifyID));
resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);
PendingIntent resultPendingIntent = PendingIntent.getActivity(getApplicationContext(), (int) notifyID,
resultIntent, 0);
NotificationCompat.Builder mNotifyBuilder;
NotificationManager mNotificationManager;
mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject(greetMsg);
sMsg = jsonObj.getString("msg");
Log.v(Constantes.TAG, "MESSAGE = "+sMsg);
// Récuperer le type de notfif
Log.v(Constantes.TAG, ProcedureGlobale.getParams("TYPE_NOTIF",sMsg)); // HERE THE MESSAGE CHANGE WELL
iTypeNotif = Integer.parseInt(ProcedureGlobale.getParams("TYPE_NOTIF",sMsg));
switch (iTypeNotif){
case Constantes.TYPE_MSG:
sNotifMsg = "Vous avez une message d'utilisateur.";
break;
case Constantes.TYPE_TEMPS:
sNotifMsg = "Un de vos compte arrive à terme.";
break;
case Constantes.TYPE_AMENDE:
sNotifMsg = "Vous avez une amende.";
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
mNotifyBuilder = new NotificationCompat.Builder(this)
.setContentTitle("Notification")
.setContentText(sNotifMsg)
.setSmallIcon(R.drawable.ic_launcher);
// Set pending intent
mNotifyBuilder.setContentIntent(resultPendingIntent);
// Set Vibrate, Sound and Light
int defaults = 0;
defaults = defaults | Notification.DEFAULT_LIGHTS;
defaults = defaults | Notification.DEFAULT_VIBRATE;
defaults = defaults | Notification.DEFAULT_SOUND;
defaults = defaults | Notification.FLAG_AUTO_CANCEL;
mNotifyBuilder.setDefaults(defaults);
// Set the content for Notification
mNotifyBuilder.setContentText(sNotifMsg);
// Set autocancel
mNotifyBuilder.setAutoCancel(true);
// Post a notification
mNotificationManager.notify((int)notifyID, mNotifyBuilder.build());
}
正如我在这里所说的那样,在log.v中我的更改通知的消息很好地传递给了PutString();
但是在getStringExtra()下的我的Activity中有时会返回一条旧的通知消息:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notif_acitivity);
String sRetour = null;
String json = getIntent().getStringExtra("greetjson");
Log.v(Constantes.TAG, "Json = " + json);
sRetour = Constantes.PARAM_TYPE_ECHAN + "NOTIF;";
您有什么想法,我确定每个通知都有不同的ID。提前感谢您的帮助。
答案 0 :(得分:0)
您可能需要将FLAG_UPDATE_CURRENT标记添加到PendingIntent.getActivity()
来电,而不是0。
正如documentation所述,如果PendingIntent已经存在(并且选择了新通知),请保留它,但替换extras
内容。
最后,您无需在意图上调用setAction
,因为这是明确的意图。而且,你为它指定的值并没有真正指向任何相关的东西。