Pergunta

I hope that receiving a push-notification (c2dm) reception display Notification. This Notification start, whith PendingIntent, an Activity that display a pop-up. This popup launch my application when clicking on the "ok" button.

Here is the code executed at the reception of push-notification :

private void dealMessage(Context context, Intent intent)
{       
    try
    {
        String message = intent.getExtras().getString("message");

        Log.v("testc2dm","message :     [" + message + "]");

        //create bean of my Notification
        NotificationPush notif = new NotificationPush();
        notif.init((JSONObject)JSONValue.parse(message));

        //create PendingIntent
        Intent intentDialog = new Intent(context, DialogActivity.class);
        intentDialog.putExtra("notif", notif);
        int requestCode= (int) System.currentTimeMillis();
        PendingIntent pi = PendingIntent.getActivity(context, requestCode, intentDialog, PendingIntent.FLAG_ONE_SHOT);

        //Create the Notification
        Notification n = new Notification();
        n.flags |= Notification.FLAG_SHOW_LIGHTS; // allume l'écran
        n.flags |= Notification.FLAG_AUTO_CANCEL; // fait disparaitre automatiquemet la notif apres un clic dessus
        n.defaults = Notification.DEFAULT_ALL;
        n.icon = R.drawable.icon;
        n.when = System.currentTimeMillis();
        n.setLatestEventInfo(context, "Mon titre", notif.getTitre(), pi);

        //add my Notification
        NotificationManager notificationManager = (NotificationManager)context.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(ID_NOTIFICATION, n);
    }
    catch(Exception e)
    {
        Log.e("testc2dm","error :       [" + e.getMessage() + "]");
        e.printStackTrace();
    }
}

this is my activity that displays popup and start my application :

protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    Log.v("testc2dm","DialogActivity oncreate()");

    //recovery of my bean Notification
    Intent intentParam = getIntent();
    NotificationPush notif = (NotificationPush)intentParam.getSerializableExtra("notif");

    if(notif != null)
    {           
        Log.v("testc2dm","notif => titre [" + notif.getTitre() + "] -- msg [" + notif.getMessage() + "] -- type [" + notif.getType() + "]");

        //display popup
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(notif.getMessage());
        builder.setTitle(notif.getTitre());
        builder.setCancelable(false);
        builder.setNegativeButton("Ok", new DialogInterface.OnClickListener() 
        {
            public void onClick(DialogInterface dialog, int id) 
            {
                if(!TestC2DMActivity.appIsRunning)
                {
                    //launch first Activity of my application
                    Intent intent = new Intent(DialogActivity.this, TestC2DMActivity.class);
                    startActivity(intent);
                }
            }
        });
        builder.show();
    }
}

My problem is : if my application will be started by receiving a push (c2dm > Notification > PendingIntent > DialogActivity > TestC2DMActivity) then receive the next push, the Notification will appear fine, but clicking on the Notification will not launch DialogActivity. Whereas when the application is started normally (icon of the app) then everything works fine.

I feel that if my application is started by my PendingIntent, then this PendingIntent no longer want launch DialogActivity .. Why??

really thanks for your help and sorry for my bad english..

Foi útil?

Solução

I have solution :

intentDialog.setAction("" + Math.random());

getExtra from Intent launched from a pendingIntent

thank you anyway

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top