GCM通知和getStringExtra();

时间:2015-02-21 11:58:16

标签: android notifications google-cloud-messaging

有几天我遇到了一个我无法解决的问题,我有一个应用程序通过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。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可能需要将FLAG_UPDATE_CURRENT标记添加到PendingIntent.getActivity()来电,而不是0。

正如documentation所述,如果PendingIntent已经存在(并且选择了新通知),请保留它,但替换extras内容。

最后,您无需在意图上调用setAction,因为这是明确的意图。而且,你为它指定的值并没有真正指向任何相关的东西。