Actividad lanzada desde receptor de difusión, mantiene en tareas recientes a pesar de haber sido terminado

Tengo un problema con dos actividades que no puedo resolver:

Tengo una actividad de A que programa una alarma con el encargado de la alarma, en 3 segundos el receptor de la alarma lanza una actividad de B que tenga solamente un botón del final.

Si programo el administrador de alarmas de A y finalizo esta actividad pulsando el botón de retroceso, en 3 segundos aparece la actividad de B. Todo normal. El problema es el siguiente: si vuelvo a abrir la aplicación por el lanzador, el sistema inicia una actividad, pero si empiezo la aplicación presionando el botón de inicio (tareas utilizadas recientemente) siempre abro la actividad de B. Necesito que cuando termine la actividad de B, si vuelvo a abrir la aplicación desde cualquier lugar, la actividad A debería abrirse.

He intentado agregar noHistory a la actividad B, pero el problema continúa.

Aquí está el código de una actividad:

public class ActivityA extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_a); Button b=(Button) findViewById(R.id.initTimer); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { programTimer(); } }); } private void programTimer() { AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); Intent intent = new Intent(this, AlarmReciver.class); PendingIntent pIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_CANCEL_CURRENT); manager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000 , pIntent); } 

}

Actividad de B:

 public class ActivityB extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_b); Button button= (Button) findViewById(R.id.bFinish); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { finish(); } }); } 

}

AlarmReciver:

 public class AlarmReciver extends android.content.BroadcastReceiver { private static final String DEBUG_TAG="ReceptorAlarma"; @Override public void onReceive(Context context, android.content.Intent intent) { //lanzar activity Intent i = new Intent(context, ActivityB.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } 

}

Manifiesto:

  <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".ActivityA" android:label="@string/title_activity_activity" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ActivityB"> </activity> <receiver android:name=".AlarmReciver" > </receiver> </application> 

gracias por tu tiempo.

Tu escribiste:

Si programo el administrador de alarmas de A y finalizo esta actividad pulsando el botón de retroceso, en 3 segundos aparece la actividad de B. Todo normal.

Nota: Ahora tiene 1 tarea en ejecución que tiene ActividadB como su actividad raíz.

El problema es el siguiente: si vuelvo a abrir la aplicación por el lanzador, el sistema inicia una actividad,

Nota: Al iniciar la aplicación desde el lanzador, se inicia otra tarea con ActivityA como actividad raíz. Ahora tiene 2 tareas en ejecución: una con ActivityA como root y otra con ActivityB

… pero si comienzo la aplicación presionando el botón de inicio (tareas recientemente utilizadas) siempre abro la actividad de B.

Nota: Cuando presiona el botón HOME y elige entre las tareas utilizadas recientemente, está eligiendo la tarea iniciada por AlarmReciver que tiene ActivityB como su raíz

Necesito que cuando termine la actividad de B, si vuelvo a abrir la aplicación desde cualquier lugar, la actividad A debería abrirse.

Debe poder obtener el comportamiento que desea estableciendo lo siguiente en la etiqueta <activity> para ActivityB:

 android:excludeFromRecents="true" 

Esto garantizará que, al iniciar una tarea con ActivityB como actividad raíz, la tarea no se muestre en la lista de tareas recientes. De esta forma, la única forma de iniciar la aplicación será desde la pantalla HOME o seleccionándola en la lista de tareas recientes (que sólo mantendrán las tareas iniciadas con ActivityA como raíz).

  • Android: Detectar cuando la tarjeta SD montada como unidad de disco a un equipo
  • Registrar un receptor de difusión de un servicio en un nuevo hilo
  • Enviar datos al receptor de difusión del administrador de alarmas
  • ¿Los usuarios de Samsung Glaxy S4 informan que el receptor BOOT_COMPLETED no funcionará?
  • Intercepción de SMS de Android sin icono de notificación o mensajes WAP-PUSH
  • Ir a SMS Pro sobreponiendo android.provider.Telephony.SMS_RECEIVED
  • Preferencias compartidas dentro de broadcastreceiver
  • Cambio de volumen Listener: ¿Es preferible registerMediaButtonEventReceiver a onKeyDown?
  • Cómo conceder permisos sólo al creador de un URI
  • No se puede encontrar el receptor definido Definido ~ 1% del tiempo
  • Cómo terminar mi llamada saliente.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.