Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Mit Delphi auf Android Handy Kalender auslesen (https://www.delphipraxis.net/195498-mit-delphi-auf-android-handy-kalender-auslesen.html)

sko1 5. Mär 2018 07:58

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

SebastianZ 5. Mär 2018 08:51

AW: Mit Delphi auf Android Handy Kalender auslesen
 
https://stackoverflow.com/questions/...dar-and-events
http://www.synaptica.info/en/2014/10...event-android/

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:

https://developers.google.com/google-apps/calendar/

sko1 5. Mär 2018 09:33

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

TiGü 5. Mär 2018 10:34

AW: Mit Delphi auf Android Handy Kalender auslesen
 
Zitat:

Zitat von sko1 (Beitrag 1395208)
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

Google doch mal "query events from android calendar".
Die gefundenen Treffer auf Stack Overflow oder in der offiziellen Doku (https://developer.android.com/guide/...uery-instances) sollten dich eigentlich weiterbringen.
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.

sko1 5. Mär 2018 11:14

AW: Mit Delphi auf Android Handy Kalender auslesen
 
Zitat:

Für das erste wäre es wahrscheinlich sinnvoll, wenn du die CalendarEventsManager-Unit studierst und entsprechend erweiterst.
Studiert habe ich die, aber erweitern?
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:
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;
was muss denn da in die projection.Items rein und wie bekomme ich die Termine und nicht nur deren Anzahl?
Irgendwie ist das Ganze für mich noch ein Rätsel...

Ciao
Stefan

TiGü 5. Mär 2018 12:11

AW: Mit Delphi auf Android Handy Kalender auslesen
 
Delphi-Quellcode:
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;
Einfach das Beispiel aus meinen Link in Delphi umsetzen, ist nicht so schwer.

SebastianZ 5. Mär 2018 12:28

AW: Mit Delphi auf Android Handy Kalender auslesen
 
Zitat:

Zitat von sko1 (Beitrag 1395208)
...

Der dritte Link ist, wenn ich das richtig sehe, eine Java-Anwendung, ich möchte mit D2010 Delphi auslesen :-(

...

Stimmt so nicht, es ist auf dieser Seite die Web-API zu finden, und ein Webinterface ist nicht sprachenspezifisch. Es gibt nur keine Beispiele in Delphi auf deren Seite, aber es lässt sich auf alle Fälle mit Indy anbinden.

sko1 5. Mär 2018 12:42

AW: Mit Delphi auf Android Handy Kalender auslesen
 
Delphi-Quellcode:
  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);
und da beginnen meine Probleme : TokTitle, TokDTStart, ... sind meinem Delphi unbekannt!
Wenn ich das richtig verstehe sind das die Spaltennamen, finde aber keine Auflistung was da verwendet wird!

Ciao
Stefan

TiGü 5. Mär 2018 13:16

AW: Mit Delphi auf Android Handy Kalender auslesen
 
Zitat:

Zitat von sko1 (Beitrag 1395241)
und da beginnen meine Probleme : TokTitle, TokDTStart, ... sind meinem Delphi unbekannt!
Wenn ich das richtig verstehe sind das die Spaltennamen, finde aber keine Auflistung was da verwendet wird!

Ich muss leider plakativ fragen:
Die offizielle Android-Dokumentation ist dir bekannt und du weißt, wie man innerhalb einer Dokumentation navigiert und sucht?

sko1 5. Mär 2018 13:37

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:27 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz