Reanudar una actividad de una notificación

Tengo una notificación en la barra de estado de mi aplicación:

Notification notification = new Notification(R.drawable.icon, null, System.currentTimeMillis()); Intent notificationIntent = new Intent(this.parent, MainActivity.class); PendingIntent contentIntent = PendingIntent.getActivity(this.parent, 0, notificationIntent, 0); ... notification.flags = Notification.FLAG_ONGOING_EVENT; mNotificationManager.notify(NOTIFICATION_ID, notification); 

El problema con esto es que cuando presionas el botón de inicio de la aplicación (empujándolo al fondo) y luego presionas la notificación en la lista a la que se accede desde la barra de estado, se inicia una copia nueva de la actividad. Lo único que quiero hacer es reanudar la aplicación (como cuando pulsas prolongadamente el botón de inicio y pulsas en el icono de la aplicación). ¿Existe una manera de crear una Intención para hacer esto?

He solucionado este problema cambiando el launchMode de launchMode de mi actividad a singleTask en el archivo androidManifest.xml.

El valor predeterminado de esta propiedad es standard , lo que permite ejecutar cualquier número de instancias.

Las actividades "singleTask" y "singleInstance" solo pueden iniciar una tarea. Están siempre en la raíz de la pila de actividades. Además, el dispositivo puede contener sólo una instancia de la actividad a la vez, sólo una tarea de este tipo. […]

Los modos "singleTask" y "singleInstance" también difieren entre sí en un solo aspecto: Una actividad de "singleTask" permite que otras actividades formen parte de su tarea. Siempre está en la raíz de su tarea, pero otras actividades (necesariamente "estándar" y "singleTop" actividades) pueden ser lanzados en esa tarea. Por otra parte, una actividad de "singleInstance" no permite que ninguna otra actividad sea parte de su tarea. Es la única actividad en la tarea. Si inicia otra actividad, esa actividad se asigna a una tarea diferente, como si FLAG_ACTIVITY_NEW_TASK estuviera en la intención.

Puede encontrar una explicación detallada en la Guía de desarrolladores de Android

espero que esto ayude

Acabo de encontrar una solución a este problema: He creado getPreviousIntent método y se lo dio a PendingIntent que `s todo:

 private Intent getPreviousIntent(Intent newIntent) { final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); final List<ActivityManager.RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0); String myPkgNm = getPackageName(); if (!recentTaskInfos.isEmpty()) { ActivityManager.RecentTaskInfo recentTaskInfo; for (int i = 0; i < recentTaskInfos.size(); i++) { recentTaskInfo = recentTaskInfos.get(i); if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) { newIntent = recentTaskInfo.baseIntent; newIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } } } return newIntent; } 

Yo estaba teniendo un problema similar y la forma correcta de manejar esto es utilizar los indicadores: Intent.FLAG_ACTIVITY_CLEAR_TOP y Intent.FLAG_ACTIVITY_SINGLE_TOP como así

 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); 

De la documentación esto:

FLAG_ACTIVITY_CLEAR_TOP

Si se establece, y la actividad que se está iniciando ya se está ejecutando en la tarea actual, entonces en lugar de iniciar una nueva instancia de esa actividad, todas las otras actividades en la parte superior de la misma se cerrará y esta Intención se entregará a la (ahora en Arriba) actividad antigua como una nueva Intención.

FLAG_ACTIVITY_SINGLE_TOP

Si se establece, la actividad no se iniciará si ya se está ejecutando en la parte superior de la pila de historial.

Yo suelo:

 notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); notificationIntent.setAction(Intent.ACTION_MAIN); 

No está seguro de que estos son los valores que necesita establecer, pero la respuesta está en los métodos / flags.

Necesita iniciar su actividad tal como lo hace el lanzador. Ver: Reanudar la aplicación y apilar desde la notificación

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.