![]() |
Mit Delphi auf Android Handy Kalender auslesen
Hallo,
nun google ich seit Tagen aber komme nicht weiter: Mein Ziel ist es, auf einem Handy aus dem (den) Kalender(n) alle Termine auszulesen und mit anderen Terminen meiner App zusammen darzustellen. Beispiele zum Schreiben von Terminen mit der CalendarEventsManager.pas habe ich gefunden und erfolgreich neue Termine erstellt, aber das ist nicht das Ziel, ich möchte bestehende bereits vorhandene Termine auslesen! Hätte bitte jemand einen Tip/Link/Beispielsource für mich? Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
![]() ![]() Versuchs mal mit der JCalendar-Klasse. Ein alternativer Ansatz, der dann auch für andere OS funktioniert, währe es den Google - Kalender über die Web-API anzusprechen: ![]() |
AW: Mit Delphi auf Android Handy Kalender auslesen
Danke für die Links, welche mich leider nicht weiter bringen:
Die ersten beiden kannte ich bereits, sie schreiben Termine in den Kalender, ich aber möchte alle bestehenden Termine lesen! Der dritte Link ist, wenn ich das richtig sehe, eine Java-Anwendung, ich möchte mit D2010 Delphi auslesen :-( Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
Zitat:
Die gefundenen Treffer auf Stack Overflow oder in der offiziellen Doku ( ![]() Wenn du Hilfe brauchst, den Java-Quelltext nach Delphi zu portieren, kann man sicherlich bei konkreten Problemen helfen. Für das erste wäre es wahrscheinlich sinnvoll, wenn du die CalendarEventsManager-Unit studierst und entsprechend erweiterst. |
AW: Mit Delphi auf Android Handy Kalender auslesen
Zitat:
Genau da liegt doch der Knackpunkt : wie? Ich habe da noch einen Codeschnipsel gefunden, finde aber nicht heraus wie ich die Werte belegen muss:
Delphi-Quellcode:
was muss denn da in die projection.Items rein und wie bekomme ich die Termine und nicht nur deren Anzahl?
Function TForm1.GetCalEvents(DTNow: TDateTime): Boolean;
var Cursor: JCursor; l_eventUri: Jnet_Uri; SortOrder: JString; Selection: JString; SelectionArgs: TJavaObjectArray<JString>; l_projection: TJavaObjectArray<JString>; sSQLEventAbfrage: String; EventCount: integer; EventId: integer; begin Result := False; l_eventUri := StrToJURI('content://com.android.calendar/events'); l_projection := TJavaObjectArray<JString>.Create(8); l_projection.Items[0] := StringToJString(TokTitle); l_projection.Items[1] := StringToJString(TokDTStart); l_projection.Items[2] := StringToJString(TokDTEnd); l_projection.Items[3] := StringToJString(TokEventTimeZone); l_projection.Items[4] := StringToJString(TokHasAlarm); l_projection.Items[5] := StringToJString(TokOriginal_ID); l_projection.Items[6] := StringToJString(TokAllDay); l_projection.Items[7] := StringToJString(TokID); SortOrder := StringToJString('dtstart ASC, dtend ASC'); // vom ältesten zum neuesten Eintrag Selection := nil; Selection := StringToJString(sSQLEventAbfrage); SelectionArgs := nil; // im Moment nicht genutzt // hier die Abfrage der Termine im jeweiligem Zeitraum Cursor := TAndroidHelper.Activity.getContentResolver.query(l_eventUri, l_projection, Selection, SelectionArgs, SortOrder); if not Assigned(Cursor) then begin // Log('GetCalEvents not Assigned(Cursor)', []); Exit; end; EventCount := Cursor.getCount; end; Irgendwie ist das Ganze für mich noch ein Rätsel... Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
Delphi-Quellcode:
Einfach das Beispiel aus meinen Link in Delphi umsetzen, ist nicht so schwer.
Function TForm1.GetCalEvents(DTNow: TDateTime): Boolean;
var Cursor: JCursor; l_eventUri: Jnet_Uri; SortOrder: JString; Selection: JString; SelectionArgs: TJavaObjectArray<JString>; l_projection: TJavaObjectArray<JString>; sSQLEventAbfrage, title: String; EventCount: integer; EventId: integer; begin Result := False; l_eventUri := StrToJURI('content://com.android.calendar/events'); l_projection := TJavaObjectArray<JString>.Create(8); l_projection.Items[0] := StringToJString(TokTitle); l_projection.Items[1] := StringToJString(TokDTStart); l_projection.Items[2] := StringToJString(TokDTEnd); l_projection.Items[3] := StringToJString(TokEventTimeZone); l_projection.Items[4] := StringToJString(TokHasAlarm); l_projection.Items[5] := StringToJString(TokOriginal_ID); l_projection.Items[6] := StringToJString(TokAllDay); l_projection.Items[7] := StringToJString(TokID); SortOrder := StringToJString('dtstart ASC, dtend ASC'); // vom ältesten zum neuesten Eintrag Selection := nil; Selection := StringToJString(sSQLEventAbfrage); SelectionArgs := nil; // im Moment nicht genutzt // hier die Abfrage der Termine im jeweiligem Zeitraum Cursor := TAndroidHelper.Activity.getContentResolver.query(l_eventUri, l_projection, Selection, SelectionArgs, SortOrder); if not Assigned(Cursor) then begin // Log('GetCalEvents not Assigned(Cursor)', []); Exit; end else begin while Cursor.moveToNext do begin title := Cursor.getString(0); // usw. usf. EventId := Cursor.getLong(7); end; end; EventCount := Cursor.getCount; Result := EventCount > 0; end; |
AW: Mit Delphi auf Android Handy Kalender auslesen
Zitat:
|
AW: Mit Delphi auf Android Handy Kalender auslesen
Delphi-Quellcode:
und da beginnen meine Probleme : TokTitle, TokDTStart, ... sind meinem Delphi unbekannt!
l_projection.Items[0] := StringToJString(TokTitle);
l_projection.Items[1] := StringToJString(TokDTStart); l_projection.Items[2] := StringToJString(TokDTEnd); l_projection.Items[3] := StringToJString(TokEventTimeZone); l_projection.Items[4] := StringToJString(TokHasAlarm); Wenn ich das richtig verstehe sind das die Spaltennamen, finde aber keine Auflistung was da verwendet wird! Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
Zitat:
Die offizielle Android-Dokumentation ist dir bekannt und du weißt, wie man innerhalb einer Dokumentation navigiert und sucht? |
AW: Mit Delphi auf Android Handy Kalender auslesen
Muss ich plakativ antworten : welche Dokumentation meinst Du?
Ich habe die letzten Tage hunderte Seiten im Netz angesehen und übersehe vielleicht inzwischen auch vieles, so z.B. habe ich "DURATION" als Spaltenmöglichkeit gefunden was mir eine "Invalid Column" Exception beschert, da findet sich "_id" wie auch "_ID" aber z.B. "dtstart" bringt nur den Tag und nicht die Uhrzeit dazu, es wäre sehr hilfreich wenn Du mir den Dir bekannten Link zu einer passenden Dokumentation schreiben könntest! Was ich auch nicht herausfinden konnte ob bei diese Spaltennamen auch Groß/Kleinschreibung relevant ist. Danke Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
Was hältst du denn von dem Link aus Beitrag Nummer vier?
|
AW: Mit Delphi auf Android Handy Kalender auslesen
den habe ich gesehen, bringt mich aber in der Frage nicht weiter!
Denn da findet sich beim Calendar.Event auch das oben genannte "DURATION" was mir einen Laufzeitfehler beschert... Ich benötige eine Liste der verwendbaren Spaltennamen, findet sich diese auch im verlinkten Dokument? Was mir inzwischen auch noch aufgefallen ist: mit der Kalenderabfrage bekomme ich alles (auch Wochennummern, Feiertage etc.) die ich im Handy von der Anzeige ausgeschlossen habe. Muss ich die (und wenn ja wie) auch noch selbst wegfiltern? Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
Zitat:
Mein Link aus Beitrag Nummer vier (zur Wiederholung: ![]() ![]() In der Tabelle findet man "Duration", da klickt man drauf. Dann scrollt die Website auf magische Weise nach unten und wir sehen: Zitat:
Schlussfolgerung:
Delphi-Quellcode:
wird wohl das gesuchte sein.
StringToJString('duration');
|
AW: Mit Delphi auf Android Handy Kalender auslesen
Du kannst für die Beispiele folgende Konstanten nehmen:
Delphi-Quellcode:
Und aus den Beispielen oben nimmst du erst einmal weniger Spalten:
TokTitle = 'title';
TokDTStart = 'dtstart'; TokDTENd = 'dtend'; TokEventTimeZone = 'eventTimezone'; TokHasAlarm = 'hasAlarm';
Delphi-Quellcode:
l_projection := TJavaObjectArray<JString>.Create(8); <- das bedeutet, dass du 8 Spalten zurück erwartest. Nimm einfach weniger, wie hier weiter unten und dann schreibst du beispielsweise nur 5 in das .Create(5)
l_projection.Items[0] := StringToJString(TokTitle); l_projection.Items[1] := StringToJString(TokDTStart); l_projection.Items[2] := StringToJString(TokDTEnd); l_projection.Items[3] := StringToJString(TokEventTimeZone); l_projection.Items[4] := StringToJString(TokHasAlarm); |
AW: Mit Delphi auf Android Handy Kalender auslesen
Vielen Dank für die Unterstützung!
Bis jetzt scheinen alle meine Fragen beantwortet zu sein, ich habe erkannt dass die Schreibweise der Spaltennamen relevant ist und dass es einen Unterschied macht ob man auf 'content://com.android.calendar/events' oder 'content://com.android.calendar/calendars' zugreift, was unterschiedliche Tabellen mit unterschiedlichen verfügbaren Spalten beinhaltet. So muss man erst mal calendars auslesen um mit deren ID und Name die Kalender-ID aus der Events-Tabelle "übersetzen zu können". Was mir vorher auch nicht klar war, dass es unterschiedliche Kalender für "Wochennummern", "Geburtstage", ect. sind... Wenn man damit das erste mal zu tun hat ist das schwer durchschaubar, ich denke aber danke Eurer Hilfe blicke ich da jetzt durch :-))) Ciao Stefan |
AW: Mit Delphi auf Android Handy Kalender auslesen
Vielleicht wäre es ja möglich ein minimales Projekt hier zu posten, ich würde mir das auch gerne einmal anschauen.
Vielen Dank ... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz