¿Cómo abrir la última actividad de la barra de estado de la notificación?

Quiero abrir la actividad iniciada tocando en la notificación en la barra de estado. Supongamos que inicie una actividad A (actividad principal de mi aplicación), esta actividad envía una notificación a la barra de estado de notificaciones. la actividad A también abre una actividad B y B abre otra actividad C. Desde C i presione el botón de inicio. Ahora quiero ir otra vez a mi aplicación así que de la barra de la notificación golpeo ligeramente en la notificación (que fue enviada por A). Aquí la notificación debe iniciar la actividad C porque se abrió por última vez.

Hice la búsqueda en esto pero no encontré la respuesta apropiada. Gracias por adelantado.

Hace unos días tuve una solución muy simple para mi problema. En lugar de iterar a través de recentTasks y obtener nuestra tarea y luego obtener baseIntent través de ella, podemos hacer cosas simples de la siguiente manera:

 Intent notificationIntent = new Intent(context, MainActivity.class); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); notificationIntent.setAction(Intent.ACTION_MAIN); 

baseIntent contiene los mismos parámetros que los anteriores Intent . Por lo tanto, en lugar de tomar recentTasks de recentTasks , es bastante bueno para usar el código anterior.

Esta notificationIntent pasará a pendingIntent para su uso posterior.

Proporcionado: MainActivity es la primera actividad cuando lanzamos nuestra aplicación y en AndroidManifest.xml debe contener IntentFilters de CATEGORY_LAUNCHER y ACTION_MAIN .

Desde que no obtuve ninguna respuesta después de buscar en esto, dejé de intentar, pero sólo algunos días antes de que comenzó a tratar de nuevo y me enteré de la solución. 🙂 Lo estoy poniendo aquí.

Pero en primer lugar sólo quería redefinir mi problema y fue :: "Obtención de la tarea de fondo en primer plano de la barra de notificación de estado" es decir, cuando pongo mi aplicación a fondo pulsando el botón de inicio y luego hacer que aparezca en primer plano, todos las actividades deben llegar a primer plano en el mismo orden en que están en la pila de la aplicación.

Para esto, necesitaba una intención pendiente que cuando se disparó trae mi aplicación al primer plano.

Aquí, cuando empieza mi aplicación, se coloca una notificación en la barra de estado que permanece allí hasta que mi aplicación se ejecute en el dispositivo.

Así que aquí está el código que he probado ::

 NotificationManager nm = (NotificationManager) getSystemService(context.NOTIFICATION_SERVICE); Notification notification = new Notification(); notification.flag = Notification.FLAG_ONGOING_EVENT | Notification.FLAG_NO_CLEAR; Intent nIntent = new Intent(); final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); final List<RecentTaskInfo> recentTaskInfos = am.getRecentTasks(1024,0); String myPkgNm = getPackageName(); if (!recentTaskInfos.isEmpty()) { RecentTaskInfo recentTaskInfo; final int size = recentTaskInfo.size(); for (int i=0;i<size;i++) { recentTaskInfo = recentTaskInfos.get(i); if (recentTaskInfo.baseIntent.getComponent().getPackageName().equals(myPkgNm)) { nIntent = recentTaskInfo.baseIntent; nIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); } } } PendingIntent pi = PendingIntent.getActivity(this, 0, nIntent, 0); notification.setLatestEventInfo(getContext(), "some Title", "some text", pi); nm.notify(0,notification); 

La clave principal aquí es la baseIntent, cuya documentación dice: La intención original utilizada para iniciar la tarea. Puede utilizar esta Intención para volver a iniciar la tarea (si ya no se está ejecutando) o llevar la tarea actual al frente.

La documentación de FLAG_ACTIVITY_NEW_TASK dice: Cuando se utiliza este indicador, si ya se está ejecutando una tarea para la actividad que está iniciando, no se iniciará una nueva actividad; en su lugar, la tarea actual simplemente se llevará al frente de la pantalla con el estado en el que se encontraba.

Lo usé primero, pero no funciona como se dice y hay muchas preguntas sobre esto ..

Anyways .. hasta ahora, he encontrado esta manera buena para traer la tarea al frente como icono en la pantalla de inicio de Android.

Pero por favor dígame los contras de esta manera para que pueda mejorar.

🙂

¿Has probado esto:

 final Intent intent = new Intent(context, YourActivity.class) intent.setAction(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_LAUNCHER); 

Los códigos anteriores le indican a Android que abra la última actividad, ya sea la actividad principal o una actividad de preferencia [que está actualmente en primer plano] que utilizó para crear / iniciar el icono en la barra de notificación en primer lugar.

ACTION_MAIN y CATEGORY_LAUNCHER refieren a las ACTION_MAIN <action android:name="android.intent.action.MAIN"/> y <category android:name="android.intent.category.LAUNCHER"/> respectivamente en su archivo AndroidManifest.xml .

Siempre trabajó para mí.

Manifiesto

 launchMode="singleTop" #For Launcher activity never use "singleTask" as a launchMode set no launchMode for other activities. (if not needed) 

Intención de notificación

 Intent notificationIntent = new Intent(); notificationIntent.setClass(this, LaucherActivity.class); notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER); 

¿Por qué no diseñar de tal manera que un extra se pasa en el intento y, a continuación, la actividad se encarga de ello en consecuencia.

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