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..
I have solution :
intentDialog.setAction("" + Math.random());
getExtra from Intent launched from a pendingIntent
thank you anyway
精彩评论