[android] Benachrichtigungsklick: Aktivität ist bereits geöffnet


Answers

Versuchen Sie, die Flags auf Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP stattdessen.

Aus der Dokumentation für FLAG_ACTIVITY_CLEAR_TOP (Hervorhebung von mir):

Wenn diese Einstellung aktiviert ist und die gerade gestartete Aktivität in der aktuellen Aufgabe bereits ausgeführt wird, werden alle anderen oben aufgeführten Aktivitäten geschlossen, anstatt eine neue Instanz dieser Aktivität zu starten, und diese Absicht wird an die (nun oben) alte Aktivität als neue Absicht.

Betrachten wir zum Beispiel eine Aufgabe, die aus den Aktivitäten besteht: A, B, C, D. Wenn D startActivity () mit einer Absicht aufruft, die in die Komponente von Aktivität B aufgelöst wird, dann werden C und D beendet und B erhält die gegebene Absicht , was dazu führt, dass der Stapel jetzt: A, B ist.

Die aktuell ausgeführte Instanz von Aktivität B im obigen Beispiel erhält entweder die neue Absicht, die Sie hier starten, in ihrer onNewIntent () -Methode, oder sie wird selbst beendet und mit der neuen Absicht neu gestartet. Wenn der Startmodus auf "multiple" (Standard) festgelegt wurde und Sie FLAG_ACTIVITY_SINGLE_TOP nicht in derselben Absicht festgelegt haben, wird er beendet und neu erstellt. Für alle anderen Startmodi oder wenn FLAG_ACTIVITY_SINGLE_TOP gesetzt ist, wird diese Absicht an onNewIntent () der aktuellen Instanz übergeben.

Question

Ich habe eine Anwendung mit Benachrichtigungen, die eine bestimmte Aktivität öffnen, wenn ich darauf klicke. Ich möchte das, wenn ich auf die Benachrichtigung klicke und die Aktivität bereits geöffnet ist, wird sie nicht erneut gestartet, sondern nur nach vorne gebracht.

Ich dachte, ich könnte es mit der Flagge FLAG_ACTIVITY_BROUGHT_TO_FRONT oder FLAG_ACTIVITY_REORDER_TO_FRONT , aber es öffnet es immer wieder, so dass ich die Aktivität zweimal habe.

Das ist mein Code:

event_notification = new Notification(R.drawable.icon,
            mContext.getString(R.string.event_notif_message), System.currentTimeMillis()); 
Intent notificationIntent = new Intent(mContext, EventListActivity.class);
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
sendNotification(event_notification, notificationIntent, mContext.getString(R.string.event_notif_title),
                body, Utils.PA_NOTIFICATIONS_ID);

Kann ich es mit Flags verwalten oder sollte ich eine Variable in SharedPreferences speichern, um zu prüfen, ob sie geöffnet ist oder nicht?

Vielen Dank!




Notification.Builder mBuilder =
            new Notification.Builder(this)
            .setSmallIcon(R.drawable.cmplayer)
            .setContentTitle("CoderoMusicPlayer")
            .setContentText("PLayer0!");

    Intent resultIntent = new Intent(this, 

    AndroidBuildingMusicPlayerActivity.class);
        resultIntent.setAction(Intent.ACTION_MAIN);
        resultIntent.addCategory(Intent.CATEGORY_LAUNCHER);

        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
                resultIntent, 0);

        mBuilder.setContentIntent(pendingIntent);
        NotificationManager mNotificationManager =
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        mNotificationManager.notify(1, mBuilder.build());

Kopieren Sie einfach den Code und fügen Sie ihn in Ihre Haupt-Launcher-Aktivität ein.

Hier ist die ursprüngliche Antwort




Related