Android Mehrere Benachrichtigungen und mit mehreren intents
Habe ich eine Recht einfache app, die die Eingabe eines Benutzers und dann setzt es als eine Benachrichtigung. Der Benutzer kann beliebig viele Benachrichtigungen, wie er/Sie mag. Ich möchten, dass der Benutzer auf die Benachrichtigung klicken und bekommen eine neue Aktivität namens ResultActivity
. ResultActivity
wiederum liest die putExtras
aus den Meldungen Absicht und zeigt Sie dem Benutzer. Der folgende code ermöglicht es mir zu tun fast alles, was ich wollte, außer jederzeit eine Benachrichtigung gedrückt wird, erhalte ich die putExtra
von der zuletzt erstellte Benachrichtigung.
Intent notificationIntent = new Intent(ctx, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(ctx, i,notificationIntent,PendingIntent.FLAG_CANCEL_CURRENT);
NotificationManager nm = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
Resources res = ctx.getResources();
NotificationCompat.Builder builder = new NotificationCompat.Builder(ctx);
builder.setContentIntent(contentIntent)
.setSmallIcon(R.drawable.ic_launcher)
.setLargeIcon(BitmapFactory.decodeResource(res,R.drawable.ic_launcher))
.setTicker("Remember to " + text.getText())
.setWhen(System.currentTimeMillis()).setAutoCancel(true)
.setContentTitle(text.getText());
//Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ResultActivity.class);
String pass = text.getText().toString();
resultIntent.putExtra("title", pass);
resultIntent.putExtra("uid", i);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
//Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ResultActivity.class);
//Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
new Uri.Builder().scheme("data").appendQueryParameter("text", "my text").build();
builder.setContentIntent(resultPendingIntent);
Notification n = builder.build();
n.flags = Notification.FLAG_NO_CLEAR;
nm.notify(i++, n);
text.setText(null);
-
Öffnen Sie die Anwendung
-
Geben Sie in "One"
-
Drücken Sie ok
-
Benachrichtigung
-
Öffnen Sie die Anwendung
-
Geben Sie in "Zwei"
-
Drücken Sie ok
-
Benachrichtigung
Nun haben Sie zwei Benachrichtigungen. Derjenige, der sagt "Man" und eine, die sagt "Zwei". Wenn Sie klicken Sie auf die Benachrichtigung "Zwei" gelangen Sie zu einem Bildschirm, der sagt "Zwei". Perfekt!
Wenn Sie klicken Sie auf die Benachrichtigung "Eine" gelangen Sie zu einem Bildschirm, der sagt "Zwei". KAPUTT!
ResultActivity.java
public class ResultActivity extends Activity {
String title = null;
TextView text;
int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
text = (TextView) findViewById(R.id.textView1);
title = getIntent().getStringExtra("title");
i = getIntent().getIntExtra("uid", 0);
text.setText(title);
}
- Bitte tun Sie nicht repost Fragen, auch wenn du den alten entfernen(s).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstellen Sie mehrere intents, die gemischt sind. Ich habe den code aufgeräumt (aber nicht testen)
notificationIntent.setAction("ACTION_" + System.nanoTime);
aber das hat nicht den trick tun, entweder.resultIntent.setData(new Uri.Builder().scheme("data") .appendQueryParameter("text", "my text")..appendQueryParameter("time", String.valueOf(System.currentTimeMillis()).build());
)Ich weiß, das war eine Menge Zeit, aber ich habe das Gefühl, dass die Antworten, die haben nichts gesagt über das problem in Ihrem code.
Das problem ist also ziemlich viel hier
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
So erstellen Sie ein pendingIntent aus der stackbuilder mit der Flagge von update_current. Wenn man sich FLAG_UPDATE_CURRENT es sagt
Also, was passiert, in Ihren Fall ist, dass Sie erstellen Sie zwei identische pendingintents aus der stackbuilder und der zweite Vorsatz überschreibt die erste . Eigentlich ist Sie nie schaffen, eine zweite, die Sie aktualisieren Sie einfach die extras der ersten.
Also leider gibt es keine Flagge für Ihren Fall , aber es ist ein guter hack um ihn herum. Was man tun kann, ist die setAction Ihrer resultIntent und eine zufällige Zeichenfolge oder eine Zeichenfolge, die Sinn macht für Ihre app.
zB.
resultIntent.setAction("dummy_action_" + notification.id);
Dadurch wird Ihr resultIntent eindeutig genug , so dass die pendingIntent erstellen wird es eher als Aktualisierung einer vorherigen.
resultIntent.setAction
es gelöst für mich. Danke!Verschiedene
requestCode
mir hilft, erstellen und aktualisieren Sie die aktuellen Absicht.Verwenden einige zufällige requestCode, Sie zu trennen, zwei Benachrichtigungen