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.
- ¿Cómo distinguir el estado de encendido / apagado de la pantalla durante la llamada entrante?
- ¿No es necesario android.permission.RECEIVE_BOOT_COMPLETED?
- ¿Cómo usar "goAsync" para broadcastReceiver?
- Recuperar el contexto de llamada en un BroadcastReceiver ()
- ¿Cómo puedo pasar los datos a Android Market con el nuevo esquema de cromo?
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.
- Android BroadcastReceiver android.intent.action.BATTERY_CHANGED
- Android: implementa el receptor de difusión para ClipboardManager
- ¿Enviar una difusión ordenada localmente (dentro de mi proceso)?
- Modo de timbre cambio de escucha Receptor de difusión?
- Cómo detener SMS de pasar a Bandeja de entrada
- Administrador de alarmas que no funciona en intervalos de tiempo específicos
- Cómo comprobar el estado de la conexión VPN en Android ICS
- Android pasa los datos de Actividad a BroadcastReceiver muestra null
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).
- ¿Cómo puedo usar OnSeekBarChangeListener de SeekBar para buscar un punto específico en un objeto MediaPlayer?
- ¿Qué identidad de usuario debe utilizarse para recopilar las compras en la aplicación de Google Play?