B
binneuhier
Fortgeschrittenes Mitglied
- 10
Hi,
ich habe ein komisches Verhalten festgestellt beim Umgang mit der Kalender API. Ich beschreibe erstmal ein paar Hintergründe:
- Meine App zeigt Termine in einer Liste an
- Mit Name und start und ende und allem drum und dran
- Mein App kann Termine hinzufügen, welche dann natürlich in der Liste auftauchen (_nicht_ über Intents)
- Beim Klick auf einen Termin wird per Intent der Eintrag geöffnet
Mein Problem ist jetzt folgendes:
Hauptsächlich geht es um die Instances-Tabelle.
Wenn ich per Intent einen Termin öffnen will muss ich ihm eine start + ende Zeit mitgeben, damit das korrekt angezeigt wird. Tu ich das nicht so zeigt mir der Terminviewer als Zeit nur 1.1.1970 an. (Der Terminviewer kommt von der Kalenderapp...klar geht ja über Intents)
Diese Informationen gekomme ich aus der Instances-Tabelle.
Die URI für die InstancesTabelle erwartet einen Start und Endzeitpunkt.
zb.:
diese URI kann ich jetzt dem ContentResolver geben um darauf querys zu starten.
Das Problem ist jetzt, das ich hier schon eine Vorauswahl an Zeiten treffen muss, welche ich ja erst auslesen will. Es wird eben ein Zeitfilter erwartet.
Probleme gibt das jetzt bei Terminen die sich wiederholen!
Das Startdate bekomme ich vom Termin selber (steht in der Events-Tabelle) das Ende jedoch nicht.
Ich möchte wenn der User einen Termin nächste Woche anlegt und er ihn anklickt, dass er auch die richtige Zeit angezeigt bekommt. Setzt ich aber mein Zeitfenster für die InstancesTabelle zu schmal (zum Beispiel nur von heute bis übermorgen) so gibt mir der Cursor nichts zurück, da in dem Zeitraum eben keine Instanz vorkommt.
Was wähle ich denn für ein Enddatum um die Instances abzufragen?
Meine erste Lösung war folgende: ich setzte in der URI das Endedatum einfach 50 Jahre in die Zukunft. Damit sollte jeder erdenkliche Termin funktionieren. Niemand hat Termine soweit in der Zukunft
Problem: diese rießen Zeitspanne zerstört den CalenderProvider föllig. Ab dem Zeitpunkt kann man mit ihm nichtmehr arbeiten. Auch die Native KalenderApp läuft dann nichtmehr richtig.
Hat jemand Tipps für mich?
(Das Problem tritt mit einmaligen Terminen nicht auf, da das Ende in der Eventstable steht. Bei Wiederhohlenden jedoch stehts nicht drin)
Als Beispiel:
Jemand legt heute einen Termin an und definiert ihn 25-jährig immer am 8.2. Also alle 25 Jahre. Klickt er auf den Termin soll dort natürlich die richtige Zeit für das nächste Auftreten der Termins stehen.
Es ist auch nicht so, das man dem CalenderProvider einfach Zeit geben muss bis er die 50 Jahre abgegrast hat...er ist dann einfach kaputt
Man muss die Datenbank löschen um wieder normal mit dem Kalender arbeiten zu können.
gruß und danke
P.S.: meine App läuft von 2.2 bis 4.2. Ab Version 4 nutze ich natürlich die API, alles was kleiner als 4 ist nutze ich die unveröffentlichte API wie man sie zuhauf im Internet findet. Getestet mit 2.2, 2.3, 4.1...immer das selbe Problem.
ich habe ein komisches Verhalten festgestellt beim Umgang mit der Kalender API. Ich beschreibe erstmal ein paar Hintergründe:
- Meine App zeigt Termine in einer Liste an
- Mit Name und start und ende und allem drum und dran
- Mein App kann Termine hinzufügen, welche dann natürlich in der Liste auftauchen (_nicht_ über Intents)
- Beim Klick auf einen Termin wird per Intent der Eintrag geöffnet
Mein Problem ist jetzt folgendes:
Hauptsächlich geht es um die Instances-Tabelle.
Wenn ich per Intent einen Termin öffnen will muss ich ihm eine start + ende Zeit mitgeben, damit das korrekt angezeigt wird. Tu ich das nicht so zeigt mir der Terminviewer als Zeit nur 1.1.1970 an. (Der Terminviewer kommt von der Kalenderapp...klar geht ja über Intents)
Diese Informationen gekomme ich aus der Instances-Tabelle.
Die URI für die InstancesTabelle erwartet einen Start und Endzeitpunkt.
zb.:
Code:
Uri.Builder builder = Uri.parse("content://com.android.calendar/instances/when").buildUpon();
ContentUris.appendId(builder, startMillis);
ContentUris.appendId(builder, endMillis);
Das Problem ist jetzt, das ich hier schon eine Vorauswahl an Zeiten treffen muss, welche ich ja erst auslesen will. Es wird eben ein Zeitfilter erwartet.
Probleme gibt das jetzt bei Terminen die sich wiederholen!
Das Startdate bekomme ich vom Termin selber (steht in der Events-Tabelle) das Ende jedoch nicht.
Ich möchte wenn der User einen Termin nächste Woche anlegt und er ihn anklickt, dass er auch die richtige Zeit angezeigt bekommt. Setzt ich aber mein Zeitfenster für die InstancesTabelle zu schmal (zum Beispiel nur von heute bis übermorgen) so gibt mir der Cursor nichts zurück, da in dem Zeitraum eben keine Instanz vorkommt.
Was wähle ich denn für ein Enddatum um die Instances abzufragen?
Meine erste Lösung war folgende: ich setzte in der URI das Endedatum einfach 50 Jahre in die Zukunft. Damit sollte jeder erdenkliche Termin funktionieren. Niemand hat Termine soweit in der Zukunft
Problem: diese rießen Zeitspanne zerstört den CalenderProvider föllig. Ab dem Zeitpunkt kann man mit ihm nichtmehr arbeiten. Auch die Native KalenderApp läuft dann nichtmehr richtig.
Hat jemand Tipps für mich?
(Das Problem tritt mit einmaligen Terminen nicht auf, da das Ende in der Eventstable steht. Bei Wiederhohlenden jedoch stehts nicht drin)
Als Beispiel:
Jemand legt heute einen Termin an und definiert ihn 25-jährig immer am 8.2. Also alle 25 Jahre. Klickt er auf den Termin soll dort natürlich die richtige Zeit für das nächste Auftreten der Termins stehen.
Es ist auch nicht so, das man dem CalenderProvider einfach Zeit geben muss bis er die 50 Jahre abgegrast hat...er ist dann einfach kaputt
Man muss die Datenbank löschen um wieder normal mit dem Kalender arbeiten zu können.
gruß und danke
P.S.: meine App läuft von 2.2 bis 4.2. Ab Version 4 nutze ich natürlich die API, alles was kleiner als 4 ist nutze ich die unveröffentlichte API wie man sie zuhauf im Internet findet. Getestet mit 2.2, 2.3, 4.1...immer das selbe Problem.