Cómo reiniciar / actualizar el contenido de la actividad en la notificación haga clic

Estoy intentando refrescar el contenido de una actividad en el tecleo de una notificación. Puedo navegar a la actividad cuando estoy en alguna otra actividad y hago clic en la notificación. Lo que estoy tratando de lograr es, estoy en la actividad A que está mostrando algunos contenidos. Recibo una nueva notificación, hago clic en ella. La actividad A debe ser relanzada o el contenido de la actividad debe actualizarse con respecto a lo que estoy pasando en el PendingIntent de la notificación.

Lo que he hecho,

  1. Se ha intentado establecer PendingIntent.FLAG_CANCEL_CURRENT y PendingIntent.FLAG_UPDATE_CURRENT

  2. Configuración Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP en la intención que estoy pasando junto con la intención pendiente.

  3. Comprobado los datos en onNewIntent() no se actualiza. Consigo los mismos datos que he pasado en la vieja intención.

  4. Pasó un requestCode único junto con el PendingIntent, así, sigue siendo el mismo.

¿Cualquier otra sugerencia?

Como dijo aldoran , use LocalBroadcastManager. En su clase de actividad:

 @Override protected void onResume() { super.onResume(); LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter(FILTER_STRING)); } @Override protected void onPause() { super.onPause(); LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); } private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d("receiver", "Got message"); } }; 

Y luego en GSM Broadcast poner sus datos en la intención:

 Intent intent = new Intent(FILTER_STRING); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 

Si utiliza Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP , esto debe recrear la actividad si estaba en la pila, o iniciar una nueva actividad si no estaba en la pila. Si no desea que la actividad sea recreada (si ya está en la pila), puede utilizar Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP .

Prueba este código:

  Intent notificationIntent = new Intent(context, DetailActivity.class); notificationIntent.putExtra(CommonConstants.EXTRA_NOTE_ID, note.get_id()); notificationIntent.setAction(CommonConstants.NOTE_NOTIFICATION_REMINDER); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); PendingIntent contentIntent = PendingIntent.getActivity(context, note.get_id(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context).setSmallIcon(R.drawable.ic_launcher) .setContentTitle(context.getString(R.string.app_name)).setContentText(note.getMessage()); mBuilder.setContentIntent(contentIntent); mBuilder.setDefaults(Notification.DEFAULT_SOUND); mBuilder.setAutoCancel(true); NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); mNotificationManager.notify(note.get_id(), mBuilder.build()); 

Lo más importante que tiene que llamar

  PendingIntent contentIntent = PendingIntent.getActivity(context, note.get_id(), notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

o

PendingIntent.FLAG_CANCEL_CURRENT

También puede utilizar LocalBroadcastManager o escribir su propio BroadcastReceiver y luego enviar Broadcast desde su Notification

  • ¿Cambia el Id de registro cuando el usuario actualiza o reinstala la aplicación
  • GET_ACCOUNTS durante el uso de GCM - ¿Por qué es necesario?
  • Enviar notificaciones push a Android
  • GCM elimina el ID de registro antiguo si el usuario instala la aplicación de nuevo inmediatamente después de la desinstalación?
  • Notificación de Android Push (lento)
  • Cómo usar Google Cloud Connection Server para enviar mensajes de GCM en sentido ascendente
  • Registro de Google Cloud Messaging AUTHENTICATION_FAILED
  • Clave de aplicación de desarrollo y secreto de aplicación para Android
  • Error interno: la clase de receptor de reintento no se ha configurado todavía
  • ParseInstallation.getCurrentInstallation (). SaveInBackground (); no funciona
  • No se resuelve la integración de GCM y gcm_defaultSenderId
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.