webentwicklung-frage-antwort-db.com.de

Absicht, eine zuvor angehaltene Aktivität fortzusetzen (wird aus einer Benachrichtigung aufgerufen)

Ich entwickle eine App, die dem Benutzer eine Benachrichtigung anzeigt. Ziel der Benachrichtigung ist es, dem Benutzer die Rückkehr zu der Aktivität zu erleichtern, wenn sich der Benutzer in einer anderen Aktivität befindet. Ich verwende diesen Code in meiner App, um die Benachrichtigung zu erstellen und anzuzeigen.

                    notification = new Notification(R.drawable.icon,
                            "Notify",
                            System.currentTimeMillis());
                    notification.setLatestEventInfo(this, "App name",
                            "App message",
                            PendingIntent.getActivity(
                                    this, 0,
                                    new Intent(this, Main.class),
                                    PendingIntent.FLAG_CANCEL_CURRENT));
                    notification.flags |= Notification.FLAG_ONGOING_EVENT;
                    nManager.notify(0, notification);

Wenn der Benutzer jedoch auf tippt, startet die Benachrichtigung eine neue Instanz derselben Aktivität anstelle der zuvor verwendeten.

Ich denke, das hat etwas mit PendingIntent zu tun, aber ich kann nicht herausfinden, wie ich diese Absicht dazu bringen kann, eine zuvor angehaltene Instanz der Aktivität fortzusetzen, anstatt eine neue Instanz zu erstellen.

Vielen Dank.

21
Jimix

Ich fand heraus, wie es geht. Ich habe folgenden Code hinzugefügt:

notifyIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);

Jetzt sieht mein Code so aus:

    notification = new Notification(R.drawable.icon,
            "Notify", System.currentTimeMillis());
    notification.setLatestEventInfo(this, "App name",
            "App message", PendingIntent.getActivity(this,
                    0, new Intent(this, Main.class)
                            .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
                                    | Intent.FLAG_ACTIVITY_SINGLE_TOP),
                    PendingIntent.FLAG_CANCEL_CURRENT));
    notification.flags |= Notification.FLAG_ONGOING_EVENT;
22
Jimix

Das hilft mir Android:launchMode="singleInstance"

<activity
        Android:name="com.mosis.automatskidnevnik.MainActivity"
        Android:launchMode="singleInstance"
        Android:label="@string/app_name" >
        ...
9
Zeljko Ivanovic

Ich habe das gleiche Problem durch Einstellen gelöst

Android:launchMode="singleTask"
1

Abgesehen von der richtigen Antwort von @Jimix würde ich die PendingIntentrequestCode von 0 in einen nicht null Wert ändern, wie auf einem anderen answer kommentiert. Andererseits gibt es einen bekannten Fehler bei früheren Android-Versionen, der mich einige verzweifelte Stunden gekostet hat. Die dort vorgeschlagene Lösung funktionierte einwandfrei, wenn ich die PendingIntent vor dem Versenden der Benachrichtigung stornierte:

if (Build.VERSION.SDK_INT == 19) {
   getNotificationPendingIntent().cancel();
}
0
GoRoS

Beim Erstellen Ihres PendingIntent verwenden Sie:

Main.this.getBaseContext ()

Sie sollten den Standard-Aktivitätskontext verwenden, wenn Sie zur gleichen Aktivität zurückkehren möchten. Lesen Sie hier mehr:

Android - Was ist der Unterschied zwischen den verschiedenen Methoden, um einen Kontext zu erhalten?

0
Yossi