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,
- Android-GCM: ¿Cómo cuidar a un usuario desconectado?
- ¿Cómo obtener una notificación interactiva push con Urban Airship en Android?
- Validación de Token GCM
- Notificación push de Android GCM para aplicaciones de localización
- Parse Push JSON problema de datos en Android
-
Se ha intentado establecer
PendingIntent.FLAG_CANCEL_CURRENT
yPendingIntent.FLAG_UPDATE_CURRENT
-
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. -
Comprobado los datos en
onNewIntent()
no se actualiza. Consigo los mismos datos que he pasado en la vieja intención. -
Pasó un
requestCode
único junto con el PendingIntent, así, sigue siendo el mismo.
¿Cualquier otra sugerencia?
- GCM enviar imagen en lugar de mensaje
- ¿En qué plataformas móviles el "push token" no es permanente?
- Android: ¿cómo puedo enviar una notificación de GCM push con instrucciones de qué actividad cargar?
- Poll vs Push - ¿Alguna razón para evitar Push Notifications?
- Solicitud del ID de registro de Google Cloud Messaging (GCM) cada vez que se inicia la aplicación
- Reaccionar notificación de empuje nativo para Android
- ¿Es gratuito Firebase Cloud Messaging?
- ¿Por qué obtengo "MismatchSenderId" desde el lado del servidor GCM?
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
- SpeechRecognizer sin conexión ERROR_NO_MATCH
- Cómo iniciar correctamente la actividad desde la vista personalizada (Java Class)?