Android OnNewIntent no se llama

Vi varios enfoques y he intentado todo, pero no podría hacer que funcione. No sé por qué es tan complicado, en los documentos que parece tan fácil! Quiero activar OnNewIntent con una notificación (el usuario hace clic en ella en la barra de notificación).

Actualmente he configurado mi actividad como singleTop

<activity android:name="-.-.-.MainMenuActivity" android:launchMode="singleTop" android:screenOrientation="portrait" > </activity> 

Este es el código donde creo la Notificación:

 public void showNotification(String text, String componentId){ NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.logo) .setContentTitle("Title") .setAutoCancel(true) .setContentText(text); // Creates an explicit intent for an Activity in your app Intent resultIntent = new Intent(this, MainMenuActivity.class); if(!componentId.equalsIgnoreCase("")){ resultIntent.putExtra("componentId", componentId); } resultIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, 0); mBuilder.setFullScreenIntent(resultPendingIntent, false); mBuilder.setContentIntent(resultPendingIntent); NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); // mId allows you to update the notification later on. mNotificationManager.notify(0, mBuilder.build()); } 

Este es el método OnNewIntent en mi MainMenuActivity:

 @Override protected void onNewIntent(Intent intent) { // TODO Auto-generated method stub super.onNewIntent(intent); setIntent(intent); ... } 

Nunca recibo la llamada OnNewIntent. No sé lo que estoy haciendo mal. Utilizo solamente 2 actividades en la aplicación entera y MainMenuActivity viene después de la LoginActivity así que la MainMenuActivity debe siempre estar encima de la pila de todos modos (tengo más fragmentos donde los substituyo dentro de MainMenuActivity).

¡Cualquier ayuda sería apreciada! Gracias chicos.

Ok tengo que trabajar poco después de publicar mi pregunta. Creo que la diferencia clave en nuestro código es que paso la bandera "PendingIntent.FLAG_UPDATE_CURRENT" a la creación / recuperación del objeto PendingIntent. Este post me ayudó a entender eso.

 Notification.Builder mBuilder = new Notification.Builder(context) .setSmallIcon(R.drawable.notifyicon) .setContentTitle(title) .setContentText(extras.getString("message")) .setAutoCancel(true) .setOnlyAlertOnce(false) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)) .setVibrate(new long[] {0,500,250,500}); if(badgeCount > 1) mBuilder.setNumber(badgeCount); // Creates an explicit intent for an Activity in your app Intent resultIntent = new Intent(context, SiteViewActivity.class); resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); resultIntent.putExtra(NOTIFY_INTENT_TYPE_KEY, alertType); PendingIntent resultPendingIntent = PendingIntent.getActivity(context, alertType, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT); mBuilder.setContentIntent(resultPendingIntent); NotificationManager notifyMgr = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); notifyMgr.notify(alertType, mBuilder.build()); 

Después de una larga inspección me di cuenta de que Android 4.4 (Kitkat y tal vez inferior) no llamará onNewIntent y onResume ni si usa FLAG_UPDATE_CURRENT en pendingIntent. Una vez que lo cambie a FLAG_ONE_SHOT, comenzará a funcionar. En Android 6 (y probablemente también 5) sin embargo, onNewIntent funciona incluso con el flag FLAG_UPDATE_CURRENT.

Sin embargo, parece que si crea varias intenciones pendientes (por ejemplo, después de recibir dos notificaciones) los datos no se actualizarán con el indicador FLAG_ONE_SHOT, por lo que el indicador FLAG_CANCEL_CURRENT puede ser una mejor opción (no tiene ningún problema con los datos no actualizados)

Como primero, debe agregar android:launchMode="singleTop" a su definición de actividad en el archivo de manifiesto como a continuación

 <activity android:name="MainActivity" android:launchMode="singleTop" </activity> 

Entonces como Hasan Masud dijo eso, debes agregar Intent.ACTION_MAIN y Intent.CATEGORY_LAUNCHER a tu acción como a continuación

 Intent intent = new Intent(this, MainActivity.class); intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); 

Eso es todo. De esta manera, si la aplicación está abierta y al hacer clic en la notificación, se iniciará un método onNewIntent (..), pero pase lo que pase, si la aplicación se cierra, al hacer clic en la notificación, la intención de notificación irá a la onCreate. ) De la actividad actual.

  • ¿Son confiables las notificaciones push de Android?
  • Programación de Android: GCMIntentService Stuck at WakeLock
  • Notificación de Android Estilo de imagen grande y estilo de texto grande
  • La aplicación se bloquea si la aplicación se cierra mediante el servicio Push: parse.com
  • GcmBroadcastReceiver no se dispara en Android 4.0.3
  • ¿Cómo puedo mostrar la notificación en la pantalla de bloqueo de Android?
  • Registro de identificación del dispositivo directamente con Amazon SNS
  • Abra la actividad haciendo clic en la notificación push de Parse
  • Haga clic en notificación para ingresar mi aplicación en android
  • Despierta Android Phone / tablet?
  • Mensajes de GCM no se entregan
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.