2012-09-26 5 views
5

ho un problema con le due attività che non riesco a risolvere:Attività lanciato dal ricevitore broadcast, tiene in attività di recente, nonostante sono stati finiti

Ho un Un'attività che i programmi di un allarme con l'allarme manager, in 3 secondi il ricevitore di allarme avvia un'attività B che ha solo un pulsante di fine.

Se programma la gestione allarmi da A e termino questa attività premendo il pulsante indietro, in 3 secondi viene visualizzata l'attività B. Tutto normale Il problema è il seguente: se apro nuovamente l'applicazione dal programma di avvio, il sistema avvia un'attività, ma se avvio l'applicazione premendo a lungo il pulsante home (attività utilizzate di recente) apro sempre l'attività B. Ho bisogno che quando finisco l'attività B, se riapro l'applicazione da qualsiasi luogo, l'attività A dovrebbe aprirsi.

Ho provato ad aggiungere noHistory all'attività B, ma il problema continua.

Ecco il codice di un'attività:

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); 
} 

}

attività 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);  
} 

}

manifesto:

<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> 

grazie per il vostro tempo.

risposta

1

Hai scritto:

Se programmo il manager di allarme da A e finire questa attività premendo il tasto indietro, in 3 secondi appare l'attività B. Tutto normale

Nota: Ora avete 1 compito in esecuzione che ha ActivityB come la sua attività principale.

Il problema è il seguente: se riaprire l'applicazione da parte lanciatore, il sistema si avvia Un'attività,

Nota: Quando si avvia l'applicazione dal programma di avvio, questo avvia un'altra attività con ActivityA come attività principale. Ora avete 2 attività in esecuzione: una con ActivityA come root ed una con ActivityB

... ma se mi metto l'applicazione premendo a lungo il tasto home (utilizzato di recente compiti) ho sempre aperto l'attività B .

Nota: Quando lungo premendo il tasto Home e scegliendo tra le attività utilizzate di recente, si sceglie il compito che è stato avviato da AlarmReciver che ha ActivityB come radice

ho bisogno che quando Finisco B attività, se riaprire l'applicazione da qualsiasi luogo, l'attività A dovrebbe aprire.

Si dovrebbe essere in grado di ottenere il comportamento desiderato impostando la seguente nel tag <activity> per ActivityB:

android:excludeFromRecents="true" 

Questo farà sì che, quando si avvia un'attività con ActivityB come la sua attività principale , l'attività sarà non essere visualizzato nell'elenco delle attività recenti. In questo modo, l'unico modo per avviare l'applicazione sarà dalla schermata HOME o selezionandolo dall'elenco delle attività recenti (che manterrà le attività solo avviate con ActivityA come root).