Надеюсь, что при получении push-уведомления (c2dm) отобразится уведомление. Это Уведомление начинается, с PendingIntent, Активностью, которая отображает всплывающее окно. Это всплывающее окно запускает мое приложение при нажатии на кнопку «ОК».
Вот код, выполняемый при получении push-уведомления:
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();
}
}
это мое действие, которое отображает всплывающее окно и запускает мое приложение:
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();
}
}
Моя проблема: если мое приложение будет запущено при получении push-уведомления (c2dm> Уведомление> PendingIntent> DialogActivity> TestC2DMActivity), а затем при получении следующего push-уведомления уведомление будет отображаться нормально, но нажатие на уведомление не запустит DialogActivity. Тогда как при нормальном запуске приложения (иконка приложения) все работает нормально.
Мне кажется, что если мое приложение запущено моим PendingIntent, то это PendingIntent больше не хочет запускать DialogActivity. Почему ??
действительно спасибо за вашу помощь и извините за мой плохой английский ..