.NET MAUI: Kalendereintrag unter Android erstellen

Aus maxTechCorner

Auf einen Blick

Gilt für.NET MAUI 9/10 bzw. .NET for Android; Android 8 bis 16
BereichSoftwareentwicklung
Dauerca. 20 Minuten
RechteEntwicklungsumgebung; Variante 2: Kalenderberechtigung des Benutzers
StandOktober 2026

Einen Kalendereintrag unter Android erstellen – etwa für einen Servicetermin aus einer Außendienst-App – geht in .NET MAUI auf zwei Wegen: Am einfachsten öffnet die App den Kalender des Geräts mit vorausgefüllten Daten, und der Benutzer bestätigt. Soll der Termin ohne Rückfrage eingetragen werden, schreibt die App direkt über den CalendarContract von Android – dafür ist eine Laufzeitberechtigung nötig.

Kalendereintrag unter Android: per Intent die Kalender-App mit vorausgefülltem Termin öffnen oder mit Laufzeitberechtigung direkt über den CalendarContract schreiben.

Variante 1: Kalender-App mit vorausgefülltem Termin öffnen (empfohlen)

Keine Berechtigung nötig, der Benutzer sieht und bestätigt den Termin. Der Code liegt in Platforms/Android oder wird mit #if ANDROID eingeschlossen:

#if ANDROID
using Android.Content;
using Android.Provider;

public static class AndroidKalender
{
    public static void TerminVorschlagen(string titel, string ort, string beschreibung,
                                         DateTimeOffset beginn, DateTimeOffset ende)
    {
        var intent = new Intent(Intent.ActionInsert)
            .SetData(CalendarContract.Events.ContentUri)
            .PutExtra(CalendarContract.ExtraEventBeginTime, beginn.ToUnixTimeMilliseconds())
            .PutExtra(CalendarContract.ExtraEventEndTime, ende.ToUnixTimeMilliseconds())
            .PutExtra(CalendarContract.Events.InterfaceConsts.Title, titel)
            .PutExtra(CalendarContract.Events.InterfaceConsts.EventLocation, ort)
            .PutExtra(CalendarContract.Events.InterfaceConsts.Description, beschreibung);

        Platform.CurrentActivity?.StartActivity(intent);
    }
}
#endif

ToUnixTimeMilliseconds() ersetzt die früher nötige Hilfsmethode zur Umrechnung von DateTime in Millisekunden.

Variante 2: Termin direkt eintragen

Schritt 1: Berechtigungen deklarieren

In Platforms/Android/AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

Schritt 2: Berechtigung zur Laufzeit anfragen

var status = await Permissions.RequestAsync<Permissions.CalendarWrite>();
if (status != PermissionStatus.Granted)
{
    await Shell.Current.DisplayAlertAsync("Kalender",
        "Ohne Kalenderzugriff kann der Termin nicht eingetragen werden.", "OK");
    return;
}

Für das Ermitteln des Zielkalenders zusätzlich Permissions.CalendarRead anfragen.

Schritt 3: Eintrag schreiben

#if ANDROID
using Android.Content;
using Android.Provider;

public static long TerminEintragen(long kalenderId, string titel,
                                   DateTimeOffset beginn, DateTimeOffset ende)
{
    var values = new ContentValues();
    values.Put(CalendarContract.Events.InterfaceConsts.CalendarId, kalenderId);
    values.Put(CalendarContract.Events.InterfaceConsts.Title, titel);
    values.Put(CalendarContract.Events.InterfaceConsts.Dtstart, beginn.ToUnixTimeMilliseconds());
    values.Put(CalendarContract.Events.InterfaceConsts.Dtend, ende.ToUnixTimeMilliseconds());
    values.Put(CalendarContract.Events.InterfaceConsts.EventTimezone, TimeZoneInfo.Local.Id);

    var uri = Platform.AppContext.ContentResolver!
        .Insert(CalendarContract.Events.ContentUri, values);
    return long.Parse(uri!.LastPathSegment!);      // ID des neuen Termins
}
#endif

Die kalenderId ermitteln Sie per Abfrage von CalendarContract.Calendars.ContentUri (z. B. den ersten beschreibbaren Kalender des Google- oder Exchange-Kontos).

Hinweise

  • Variante 1 bevorzugen: Weniger Berechtigungen bedeuten weniger Rückfragen in der Google-Play-Prüfung und mehr Vertrauen der Benutzer.
  • Plattformübergreifend: Für Android und iOS bietet sich ein Community-Plugin für Kalenderzugriff an (z. B. Plugin.Maui.CalendarStore); unter iOS ist zusätzlich ein Nutzungshinweis in der Info.plist nötig.
  • Zeitzonen: Termine immer als DateTimeOffset bzw. UTC übergeben, sonst verschieben sie sich bei Sommer-/Winterzeit.
  • Bei Außendienst- und Service-Apps mit Kalender- und Groupware-Anbindung unterstützt Sie die individuelle Softwareentwicklung von m.a.x. it.

Siehe auch

Links und Quellen


Über m.a.x. it Die m.a.x. Informationstechnologie AG ist seit über 30 Jahren IT-Partner mittelständischer und großer Unternehmen in München und bietet maßgeschneiderte Lösungen und Services in den Bereichen Cloud, Cybersecurity, Netzwerk, Windows, Linux und Softwareentwicklung. Sie haben eine Frage zu diesem Artikel oder brauchen Unterstützung? Kontakt aufnehmen