wake-up-neo.com

androides Problem mit absichtlicher Intent-Benachrichtigung

Ich habe eine Alarmsache in meiner App und es wird eine Benachrichtigung gestartet, die dann beim Drücken einer Aktivität ausgelöst wird .. Das Problem ist, dass, wenn ich mehr als einen Alarm erstelle, die aus der Benachrichtigung gestartete Aktivität die gleichen Extras wie die Erster. Ich denke, das Problem liegt entweder in der Absicht, die ich in die anstehende Absicht stecke, oder in der anstehenden Absicht selbst. Ich denke, ich muss vielleicht eine Flagge auf eine davon setzen, aber ich weiß nicht, welche.

Intent showIntent =new Intent(context, notificationreceiver.class);
    showIntent.putExtra("details", alarmname);

PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
        showIntent, 0); 

    notification.setLatestEventInfo(context, "The event is imminent",
            alarmname, contentIntent);

Und der Empfänger der Benachrichtigung

Bundle b = getIntent().getExtras();
    String eventname = b.getString("details");
    details.setText(eventname);

Der Zusatz "Details" ist derselbe wie bei jedem nächsten Mal, wenn eine Benachrichtigung statt eines anderen Werts auftritt. Bis ich die Absichten festlegte, bin ich sicher, dass der korrekte Wert den "Details" entspricht, also ist es ein Problem, zu bekommen die erste Absicht jedes Mal, wenn ich auf eine Benachrichtigung drücke ... Wie kann ich es schaffen, die richtigen Absichten zu starten? Ich hoffe, ich war so klar, wie ich konnte.

72
spagi

Das Problem ist, wenn ich mehr als ein Alarm dann die Aktivität von der Benachrichtigung gestartet bekommt die gleichen Extras wie der erste.

Richtig.

Wie kann ich es schaffen, das .__ zu starten. richtige Absichten?

Das hängt davon ab, ob Sie zwei Alarme haben, die sofort registriert werden oder nicht.

Wenn nicht, können Sie verwenden Sie FLAG_ONE_SHOT oder eines der anderen PendingIntent-Flags , damit Ihre zweite PendingIntent die neueren Extras verwendet.

Wenn Sie jedoch zwei Alarme gleichzeitig mit unterschiedlichen Intent-Extras registriert haben, müssen Sie die beiden Intents wesentlich stärker unterscheiden, so dass filterEquals() beim Vergleich der beiden false zurückgibt. Sie können beispielsweise setData() oder setAction() aufrufen und für jede Intent unterschiedliche Werte angeben.

68
CommonsWare

Ich habe dieses Problem gelöst, indem ich einen eindeutigen requestCode zugewiesen habe, wenn Sie das PendingIntent erhalten:

PendingIntent.getActivity(context, requestCode, showIntent, 0); 

Auf diese Weise registrieren Sie verschiedene/eindeutige Absichtsinstanzen im System Tipp: Eine gute Methode, um den requestCode eindeutig zu machen, besteht darin, die aktuelle Systemzeit an ihn zu übergeben.

int requestID = (int) System.currentTimeMillis();
116
u-ramos

eine andere Lösung:

verwenden Sie das PendingIntent.FLAG_UPDATE_CURRENT wie folgt:

PendingIntent contentIntent = PendingIntent.getActivity(this, 0,i, PendingIntent.FLAG_UPDATE_CURRENT);

das hat für mich funktioniert

0
Abeer Sul

Ich hatte dieses Problem in meiner App und habe gerade eine Zufallszahl generiert, um die Benachrichtigungsabsicht zu überschreiben:

int random= new Random().nextInt();
PendingIntent resultPendingIntent =
      stackBuilder.getPendingIntent(
              random,
              PendingIntent.FLAG_UPDATE_CURRENT
      );
0
bsh