Mein MainActicity
beginnt RefreshService
mit einem, Intent
der ein boolean
Extra genannt hat isNextWeek
.
Mein RefreshService
macht ein, Notification
das mein startet, MainActivity
wenn der Benutzer darauf klickt.
das sieht so aus:
Log.d("Refresh", "RefreshService got: isNextWeek: " + String.valueOf(isNextWeek));
Intent notificationIntent = new Intent(this, MainActivity.class);
notificationIntent.putExtra(MainActivity.IS_NEXT_WEEK, isNextWeek);
Log.d("Refresh", "RefreshService put in Intent: isNextWeek: " + String.valueOf(notificationIntent.getBooleanExtra(MainActivity.IS_NEXT_WEEK,false)));
pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
builder = new NotificationCompat.Builder(this).setContentTitle("Title").setContentText("ContentText").setSmallIcon(R.drawable.ic_notification).setContentIntent(pendingIntent);
notification = builder.build();
// Hide the notification after its selected
notification.flags |= Notification.FLAG_AUTO_CANCEL;
notificationManager.notify(NOTIFICATION_REFRESH, notification);
Wie Sie sehen können, notificationIntent
sollte das das boolean
Extra haben, IS_NEXT_WEEK
dessen Wert in isNextWeek
das eingegeben wird PendingIntent
.
Wenn ich jetzt darauf Notification
klicke, bekomme ich immer den false
Wert vonisNextWeek
Auf diese Weise erhalte ich den Wert in MainActivity
:
isNextWeek = getIntent().getBooleanExtra(IS_NEXT_WEEK, false);
Log:
08-04 00:19:32.500 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity sent: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService got: isNextWeek: true
08-04 00:19:32.510 13367-13573/de.MayerhoferSimon.Vertretungsplan D/Refresh: RefreshService put in Intent: isNextWeek: true
08-04 00:19:41.990 13367-13367/de.MayerhoferSimon.Vertretungsplan D/Refresh: MainActivity.onCreate got: isNextWeek: false
Wenn ich das direkt MainActivity
mit einem Intent
mit dem "sNextValue" wie folgt beginne:
Intent i = new Intent(this, MainActivity.class);
i.putExtra(IS_NEXT_WEEK, isNextWeek);
finish();
startActivity(i);
alles funktioniert gut und ich bekomme true
wann isNextWeek
ist true
.
Was mache ich falsch, dass es immer einen false
Wert gibt?
AKTUALISIEREN
Dies löst das Problem: https://stackoverflow.com/a/18049676/2180161
Zitat:
Mein Verdacht ist, dass, da sich in der Absicht nur die Extras ändern, die
PendingIntent.getActivity(...)
Factory-Methode einfach die alte Absicht als Optimierung wiederverwendet.Versuchen Sie in RefreshService:
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);
Sehen:
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
UPDATE 2
Siehe Antwort unten, warum es besser ist, zu verwenden PendingIntent.FLAG_UPDATE_CURRENT
.