2012-09-26 9 views
5

he un problema con dos actividades que no puedo resolver:Actividad lanzado desde el receptor de difusión, mantiene en tareas recientemente, a pesar de haber sido terminado

Tengo una Una actividad que los programas de una alarma con la alarma manager, en 3 segundos el receptor de alarma lanza una actividad B que solo tiene un botón de finalización.

Si programo el administrador de alarmas desde A y termino esta actividad presionando el botón Atrás, en 3 segundos aparece la actividad B. Todo normal. El problema es el siguiente: si vuelvo a abrir la aplicación mediante el iniciador, el sistema inicia la actividad A, pero si comienzo la aplicación presionando prolongadamente el botón de inicio (tareas usadas recientemente) siempre abro la actividad B. Necesito que cuando termine la actividad 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.

Este es 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 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 su tiempo.

Respuesta

1

Usted escribió:

Si programo el gerente de alarma de la A y terminar esta actividad pulsando el botón de retroceso , en 3 segundos aparece la actividad B. Todo normal.

Nota: Ahora tiene 1 tarea en ejecución que tiene ActivityB como su actividad radicular.

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

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

... pero si comienzo a la aplicación una presión prolongada del botón de inicio (recientemente utilizó tareas) siempre abierta la actividad B .

Nota: Cuando larga presionando el botón de inicio y la elección de las tareas utilizadas recientemente, está eligiendo la tarea que fue iniciado por AlarmReciver que tiene ActivityB como su raíz

Necesito que cuando Termino la actividad B, si reabro la aplicación desde cualquier lugar, la actividad A debería abrirse.

Usted debe ser capaz de obtener el comportamiento que desee estableciendo el siguiente en la etiqueta <activity> para ActivityB:

android:excludeFromRecents="true" 

Esto asegurará que, cuando se inicia una tarea con ActivityB como su actividad radicular , la tarea será no se mostrará en la lista de tareas recientes. De esta forma, la única forma de iniciar la aplicación será desde la pantalla INICIO o seleccionándola desde la lista de tareas recientes (que contendrá las tareas solamente que se iniciaron con ActivityA como raíz).

Cuestiones relacionadas