Al hacer clic en Notificación, ¿no está comenzando la actividad prevista?

Estoy usando GCM en mi aplicación y también estoy usando NotificationManager para Crear una Notificación cada vez que recibo un mensaje GCM. Ahora todo está funcionando perfectamente y el mensaje GCM se muestra correctamente en el área de Notificación, pero cuando hago clic en la notificación debería comenzar una actividad de mi aplicación que mostrará el detalle del mensaje que no está sucediendo. Cada vez que hago clic en notificaciones, no comienza ninguna actividad y permanece como está. Mi código para crear notificaciones es:

private void sendNotification(String msg) { SharedPreferences prefs = getSharedPreferences( DataAccessServer.PREFS_NAME, MODE_PRIVATE); mNotificationManager = (NotificationManager) this .getSystemService(Context.NOTIFICATION_SERVICE); Intent intent = new Intent(this, WarningDetails.class); Bundle bundle = new Bundle(); bundle.putString("warning", msg); bundle.putInt("warningId", NOTIFICATION_ID); intent.putExtras(bundle); // The stack builder object will contain an artificial back stack for // the // started Activity. // This ensures that navigating backward from the Activity leads out of // your application to the Home screen. TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); // Adds the back stack for the Intent (but not the Intent itself) stackBuilder.addParentStack(WarningDetails.class); // Adds the Intent that starts the Activity to the top of the stack stackBuilder.addNextIntent(intent); PendingIntent contentIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( this).setSmallIcon(R.drawable.weather_alert_notification) .setContentTitle("Weather Notification") .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setContentText(msg); String selectedSound = prefs.getString("selectedSound", ""); if (!selectedSound.equals("")) { Uri alarmSound = Uri.parse(selectedSound); mBuilder.setSound(alarmSound); } else { Uri alarmSound = RingtoneManager .getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); mBuilder.setSound(alarmSound); } if (prefs.getBoolean("isVibrateOn", false)) { long[] pattern = { 500, 500, 500, 500, 500, 500, 500, 500, 500 }; mBuilder.setVibrate(pattern); } mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } 

Actualicé mi código para admitir la Preserving Navigation when Starting an Activity tal como sucede en la aplicación de Gmail utilizando el sitio web de desarrolladores de Android desde que dejó de funcionar. Alguien por favor guía lo que me estoy perdiendo o haciendo mal en este código.

Mi problema se solucionó. Solo tengo que agregar la bandera PendingIntent.FLAG_ONE_SHOT , así que reemplacé:

 PendingIntent contentIntent = stackBuilder .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

a

 PendingIntent contentIntent = stackBuilder .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT); 

Encontré el mismo problema y lo resolví agregando android: exported = “true” a la statement de actividad en AndroidManifest.xml.

Aquí acaba de pasar su Intención a un pendiente: vea debajo

 Intent notificationIntent = new Intent(context, Login.class); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); and set this contentintent into your Notification: Notification noti = new NotificationCompat.Builder(context) .setSmallIcon(icon_small) .setTicker(message) .setLargeIcon(largeIcon) .setWhen(System.currentTimeMillis()) .setContentTitle(title) .setContentText(message) .setContentIntent(**contentIntent**) .setAutoCancel(true).build(); 

Esto puede ayudarte.

si inicia la actividad prevista utilizando Action String, no olvide agregar

     

dentro de la etiqueta

La actividad que desea iniciar se debe designar como actividad LAUNCHER en su manifiesto; de lo contrario, no se iniciará mediante un Intento Pendiente. Agregue lo siguiente a su en AndroidManifext.xml

      

De lo contrario, necesitará usar una Actividad que ya está designada como LANZADOR (como su actividad PRINCIPAL)

Haga algo así en el método generateNotification () ..

Reemplace su actividad con la clase Splash.Java.

 /** * Issues a notification to inform the user that server has sent a message. */ @SuppressWarnings("deprecation") private static void generateNotification(Context context, String message) { int icon = R.drawable.ic_launcher; long when = System.currentTimeMillis(); //message = "vivek"; // Log.d("anjan", message.split("~")[0]); //Toast.makeText(context, message, Toast.LENGTH_LONG).show(); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); Notification notification = new Notification(icon, message, when); String title = context.getString(R.string.app_name); Log.d("anjan1", title); String text_message = context.getString(R.string.title_activity_main); Log.d("anjan1", text_message); Intent notificationIntent = new Intent(context, Splash.class); // set intent so it does not start a new activity notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent intent = PendingIntent.getActivity(context, 0, notificationIntent, 0); notification.setLatestEventInfo(context, title, message, intent); notification.flags |= Notification.FLAG_AUTO_CANCEL; // Play default notification sound notification.defaults |= Notification.DEFAULT_SOUND; // Vibrate if vibrate is enabled notification.defaults |= Notification.DEFAULT_VIBRATE; notificationManager.notify(0, notification); } 

Pruebe esto en lugar de la última línea:

mNotificationManager.notify (0, mBuilder.getNotification ());