Frage

In Android, I definiert eine Aktivität ExampleActivity.

Wenn meine Anwendung gestartet wurde, eine Instanz dieser A-Aktivität erstellt wurde, sagen, es A ist. Wenn Benutzer auf eine Schaltfläche in A, eine andere Instanz von B-Aktivität geklickt wurde B erstellt. Nun ist die Aufgabe Stapel B-A, mit B an der Spitze. Dann klickte Benutzer auf eine Schaltfläche auf B, eine andere Instanz von C-Aktivität und C erstellt wurde. Nun ist die Aufgabe Stapel C-B-A, mit C an der Spitze.

Nun, wenn Benutzer auf eine Schaltfläche auf C klicken, mag ich die Anwendung A in den Vordergrund zu bringen, das heißt A an der Spitze des Task-Stack sein macht, A-C-B.

Wie kann ich den Code schreiben, um sie geschehen?

War es hilfreich?

Lösung

Sie können versuchen, diese FLAG_ACTIVITY_REORDER_TO_FRONT (das Dokument beschreibt genau was Sie wollen)

Andere Tipps

Der beste Weg, fand ich, dies zu tun war die gleiche Absicht wie die Android-Startbildschirm Anwendungen zu verwenden. - Die App Launcher

Zum Beispiel:

Intent i = new Intent(this, MyMainActivity.class);
i.setAction(Intent.ACTION_MAIN);
i.addCategory(Intent.CATEGORY_LAUNCHER);
startActivity(i);

Auf diese Weise, was auch immer Aktivität in meinem Paket wurde zuletzt durch den Benutzer verwendet wird, wieder nach vorne bringt. Ich fand diese nützlich in meinem Dienst des PendingIntent mit dem Benutzer zurück zu meiner App bekommen.

Hier ist ein Code-Beispiel dafür, wie Sie es tun können:

Intent intent = getIntent(getApplicationContext(), A.class)

Dies wird sicherstellen, dass Sie nur eine Instanz einer Aktivität auf dem Stapel haben.

private static Intent getIntent(Context context, Class<?> cls) {
    Intent intent = new Intent(context, cls);
    intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
    return intent;
}

FLAG_ACTIVITY_REORDER_TO_FRONT : Wenn Satz in einem zu Context.startActivity geben Intent (), dieser Flag wird die gestartete Aktivität dazu führen, seine Aufgabe Geschichte Stapel nach vorne gebracht werden, wenn es bereits ausgeführt wird.

Intent i = new Intent(context, AActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(i);

Ich denke, eine Kombination von Intent Fahnen sollte es tun. Insbesondere Intent.FLAG_ACTIVITY_CLEAR_TOP und Intent.FLAG_ACTIVITY_NEW_TASK.

Fügen Sie diese Flags auf Ihre Absicht vor startActvity aufrufen.

i.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);

Beachten Sie Ihre homeactivity launchmode sein sollte single_task

Im Allgemeinen Ich denke, diese Methode des Aktivitätsmanagements wird nicht empfohlen. Das Problem bei der Reaktivierung einer Tätigkeit zwei Stufen nach unten im Stapel ist, dass diese Aktivität getötet wahrscheinlich ist. erinnert Mein Rat in den Zustand Ihrer Aktivitäten und startet sie mit startActivity ()

Ich bin sicher, Sie haben diese Seite gesehen, aber für Ihre Bequemlichkeit dieses Link

Wenn Sie eine Aktivität an die Spitze des Stapels zu bringen, wenn auf einer Benachrichtigung klicken, dann können Sie tun müssen, um die folgenden, um die FLAG_ACTIVITY_REORDER_TO_FRONT Arbeit zu machen:

Die Lösung für mich dafür war ein Rundfunkempfänger, der zuhört, um Broadcast-Aktionen, die die Meldung Auslöser zu machen. Also im Grunde:

  1. Benachrichtigung löst eine Sendung Aktion mit einer extra den Namen der Aktivität zu starten.

  2. Rundfunkempfänger fangen diese, wenn die Benachrichtigung geklickt wird, erstellt dann eine Absicht, dass die Aktivität mit der FLAG_ACTIVITY_REORDER_TO_FRONT Flagge starten

  3. Aktivität an die Spitze der Aktivität Stapel gebracht wird, keine Duplikate.

, wenn Sie die „Google Cloud Message“ verwenden Push-Benachrichtigungen mit „PendingIntent“ Klasse zu erhalten, zeigt der folgende Code die Benachrichtigung in der Aktionsleiste nur.

Wenn Sie auf die Meldung keine Aktivität erstellt wird, die letzte aktive Aktivität wird wieder hergestellt, ohne Probleme aktuellen Stand zu halten.

Intent notificationIntent = new Intent(this, ActBase.class); **notificationIntent.setAction(Intent.ACTION_MAIN); notificationIntent.addCategory(Intent.CATEGORY_LAUNCHER);** PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.ic_launcher) .setContentTitle("Localtaxi") .setVibrate(vibrate) .setStyle(new NotificationCompat.BigTextStyle().bigText(msg)) .setAutoCancel(true) .setOnlyAlertOnce(true) .setContentText(msg);

mBuilder.setContentIntent(contentIntent);

NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build());

Ciao!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top