1

Ich habe eine Klasse erstellt, die von CountDownTimer erstreckt, Es hat eine Methode onFinish(), die ruft, wenn timer abläuft.So schließen Sie alle geöffneten Aktivitäten und öffnen Sie eine neue von einer Java-Klasse

Es gibt 6 Aktivitäten, Benutzer in jedem activity sein kann, wenn der Timer abgelaufen ist, also in CounterTimer wenn Finish() Methodenaufrufe, ich brauche eine Alert Message dem Benutzer zu zeigen, zusammen mit i Benutzer Login Seite umleiten müssen.

Dinge werden verwirrend, wie ich in der Normal Class nicht anrufen kann, kann ich auch nicht die context übergeben, wie Benutzer in jeder Aktivität sein kann.

Ich habe folgenden Code geschrieben, aber es hilft nicht.

Ich verwende Kontext hier, aber Meldung seiner geben Fehler auf context zu Intent

public class CounterClass extends CountDownTimer implements ITMServiceEvent { 

    @Override 
    public void onFinish() { 
     if(sql_code.equalsIgnoreCase("0")) { 
      String resultCode = command1.getString("result"); 
      context.startActivity(context.getApplicationContext(), MainActivity.class); 
      } 

Aufruf Timer am Anfang des Assistenten vorbei, in ein Fragment

CounterClass counterClass= new CounterClass(180000,1000); 
counterClass.setTextView(tvTimer); 
counterClass.start(); 
+1

überprüfen Sie [this] (http://Stackoverflow.com/a/6330456/5296734) aus, es kann Ihnen helfen. –

+0

@ nick7291: Danke, lass mich das versuchen – Kirmani88

+0

Mögliche Duplikate von [Alle vorherigen Aktivitäten beenden] (http://stackoverflow.com/questions/6330260/finish-all-previous-activities) – faranjit

Antwort

1

Es gibt zwei Teile Ihre Frage ist zunächst, wie Sie den Aktivitätsstapel bereinigen und eine neue Aktivität obenauf starten können. Ich nehme an, das wäre in Ihrem Fall die LoginActivity.

Um dies zu tun, müssen Sie die Flagge Ihres LoginActivity Absicht setzen, wenn Sie es starten wollen,

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK); 

Und der zweite Teil ist, Sie wollen die aktuelle Aktivität beenden können, nachdem zeigen ein Dialog für den Benutzer. Ich nehme an, Ihr Timer ist eine Serviceklasse, die im Hintergrund läuft. Der Weg, um Ihrer aktuellen Aktivität zu sagen, dass die Zeit abgelaufen ist! ist eine Broadcast-Nachricht zu senden. Vorzugsweise kann LocalBroadcastManager Ihnen helfen. Sie können eine BaseActivity-Klasse haben, von der alle Ihre 6 Aktivitäten erweitert werden können, und Sie können LocalBroadcastManager für diese Aktivitäten in der BaseActivity-Klasse registrieren/abmelden (in onResume registrieren und in abmelden). Nachdem Sie sie registriert haben, müssen Sie nur die onReceive Methode implementieren und behandeln, wo Sie einen Dialog anzeigen und die LoginActivity starten können, nachdem Sie die aktuelle beendet haben.

Verwandte Themen