Hallo,
ich habe folgenden Codeausschnitt, der nichts anderes macht als Reminder in die Datenbank hinzuzufügen und anschließend für die nächsten 40 Tage Pushupbenachrichtigungen zu generieren. Dies sieht so aus:
int maxInstances = 40;
while(it.hasNext() && (!rule.isInfinite() || maxInstances-- > 0))
{
org.dmfs.rfc5545.DateTime nextInstance = it.nextDateTime();
// System.out.println("XYZ: " + nextInstance.getDayOfMonth() + " " + nextInstance.getMonth() + " " + nextInstance.getYear());
Calendar newcal_from = Calendar.getInstance();
newcal_from.setTimeInMillis(dtstart);
newcal_from.set(Calendar.DAY_OF_MONTH, nextInstance.getDayOfMonth());
newcal_from.set(Calendar.MONTH, nextInstance.getMonth());
newcal_from.set(Calendar.YEAR, nextInstance.getYear());
long dtstart_new = newcal_from.getTimeInMillis();
if(reminders != null && reminders.size() > 0) {
for(int i = 0; i < reminders.size(); i++) {
if(reminders.get(i) != null) {
ContentValues reminderscontentvalues = new ContentValues();
reminderscontentvalues.put(CalendarContract.Reminders.EVENT_ID, eventID);
reminderscontentvalues.put(CalendarContract.Reminders.METHOD, reminders.get(i).getType());
reminderscontentvalues.put(CalendarContract.Reminders.MINUTES, reminders.get(i).getMinutes());
Uri uri3 = cr.insert(CalendarContract.Reminders.CONTENT_URI, reminderscontentvalues);
int reminderid = Integer.parseInt(uri3.getLastPathSegment());
long scheduletime = dtstart_new - System.currentTimeMillis() - (reminders.get(i).getMinutes() * 60l * 1000l);
if(scheduletime > 0l) {
if(firstidused == false) {
firstidused = true;
}
else {
id = String.valueOf(getInstance(eventID, dtstart_new));
System.out.println("InstanceID: " + id);
}
scheduleNotification(getNotification(title, Long.valueOf(id), dtstart_new), reminderid, scheduletime);
System.out.println("GUT: Title " + title + " " + Long.valueOf(id) + " " + dtstart_new + " " + reminderid + " " + scheduletime);
}
}
}
}
}
Alles anzeigen
Die Funktionen scheduleNotification und getNotification sehen so aus:
private void scheduleNotification(Notification notification, int reminderid, long delay) {
Intent notificationIntent = new Intent(this.c, NotificationPublisher.class);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION_ID, reminderid);
notificationIntent.putExtra(NotificationPublisher.NOTIFICATION, notification);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.c, reminderid, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
long futureInMillis = elapsedRealtime() + delay;
AlarmManager alarmManager = (AlarmManager)this.c.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, futureInMillis, pendingIntent);
}
private Notification getNotification(String title, long eventid, long timefrom) {
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timefrom);
Notification.Builder builder = new Notification.Builder(this.c);
builder.setContentTitle(title);
builder.setContentText(String.valueOf(DateHelper.singleNumber(cal.get(Calendar.DAY_OF_MONTH)) + "." + DateHelper.singleNumber(cal.get(Calendar.MONTH) + 1) + "." + DateHelper.singleNumber(cal.get(Calendar.YEAR)) + " " + String.valueOf(DateHelper.singleNumber(cal.get(Calendar.HOUR_OF_DAY)) + ":" + DateHelper.singleNumber(cal.get(Calendar.MINUTE)) + " Uhr")));
builder.setSmallIcon(R.mipmap.ic_launcher);
Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
builder.setSound(alarmSound);
System.out.println("WidgetPosition: " + new String(String.valueOf(cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + cal.get(Calendar.YEAR)) + "." + String.valueOf(eventid) + "." + timefrom));
Intent i = new Intent(this.c, MainActivity.class);
i.putExtra("widgetposition", new String(String.valueOf(cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + cal.get(Calendar.YEAR)) + "." + String.valueOf(eventid) + "." + timefrom));
PendingIntent contentIntent = PendingIntent.getActivity(this.c, 0,
i, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setContentIntent(contentIntent);
return builder.build();
}
Alles anzeigen
Mein Problem ist jetzt folgendes:
Die erste Pushupnachricht hat ungefähr die Form:
"Terminkalender
Name des Termins
12.12.2017 18:25 Uhr"
Das klappt also ganz gut.
Aber dann, wenn ich auf die Pushupnachricht draufklicke, bekomme ich in der App die Variable "widgetposition" (siehe Zeile 26 im zweiten Ausschnitt) als 20.01.2018.[terminid].[zeitinmillisekunden].
Warum ruft Java den 20.01.2018 auf und nicht den 12.12.2017?
Im Prinzip mache ich doch mit der Zeile
builder.setContentText(String.valueOf(DateHelper.singleNumber(cal.get(Calendar.DAY_OF_MONTH)) + "." + DateHelper.singleNumber(cal.get(Calendar.MONTH) + 1) + "." + DateHelper.singleNumber(cal.get(Calendar.YEAR)) + " " + String.valueOf(DateHelper.singleNumber(cal.get(Calendar.HOUR_OF_DAY)) + ":" + DateHelper.singleNumber(cal.get(Calendar.MINUTE)) + " Uhr")));
und dieser:
i.putExtra("widgetposition", new String(String.valueOf(cal.get(Calendar.DAY_OF_MONTH) + "." + cal.get(Calendar.MONTH) + "." + cal.get(Calendar.YEAR)) + "." + String.valueOf(eventid) + "." + timefrom));
Das Gleiche.
Die Variable wird dann mit
if(dontshow == false) {
this.datefromwidget = getIntent().getStringExtra("widgetposition");
System.out.println("testÖ: " + this.datefromwidget);
}
if(this.datefromwidget != null) {
System.out.println("Testk: " + this.datefromwidget);
String[] split = datefromwidget.split(Pattern.quote("."));
widgetid = split[3];
widgetdtstart = Long.valueOf(split[4]);
Calendar calen = Calendar.getInstance();
TimeZone tz = calen.getTimeZone();
widgetdtstart = widgetdtstart + tz.getOffset(widgetdtstart);
}
Alles anzeigen
abgefangen. Die Ausgabe lautet dann "Tesk: 20.0.2017.[eventid].[timeinmillisekunden]"
Was falsch ist, ist das 20.0.2017. Die anderen beiden Parameter [eventid].[timeinmillisekunden] stimmen.
Was mache ich falsch?