Xamarin CalendarContract

本文关键字:CalendarContract Xamarin | 更新日期: 2023-09-27 18:18:46

我正在使用DependencyService创建xamarin表单中的日历,并使用以下代码创建事件:

ContentResolver cr = ((Activity)Forms.Context).ContentResolver;
ContentValues values = new ContentValues();
var uri = CalendarContract.Calendars.ContentUri;
values.Put(CalendarContract.Events.InterfaceConsts.CalendarId, Id);
values.Put(CalendarContract.Events.InterfaceConsts.Title, title);
values.Put(CalendarContract.Events.InterfaceConsts.Description, description);
values.Put(CalendarContract.Events.InterfaceConsts.Dtstart, GetDateTimeMS(year, month, day, hour, minute));
values.Put(CalendarContract.Events.InterfaceConsts.Dtend, GetDateTimeMS(year, month, day, hour, minute));
values.Put(CalendarContract.Events.InterfaceConsts.AllDay, allday ? "1" : "0");
values.Put(CalendarContract.Events.InterfaceConsts.HasAlarm, hasalarm ? "1" : "0");
values.Put(CalendarContract.Events.InterfaceConsts.EventTimezone, "GMT+" + zone + ":00");
values.Put(CalendarContract.Events.InterfaceConsts.EventEndTimezone, "GMT+" + zone + ":00");
cr.Insert(CalendarContract.Events.ContentUri, values);

我真正想要的是将这些事件添加到自创建的日历中。如何首先创建日历,然后将上述事件添加到日历中?

Xamarin CalendarContract

下面是在设备上创建新日历的示例,摘自Source:

            var uri = CalendarContract.Calendars.ContentUri;
            ContentValues val = new ContentValues();
            val.Put(CalendarContract.Calendars.InterfaceConsts.AccountName, AccountName);
            val.Put(CalendarContract.Calendars.InterfaceConsts.AccountType, CalendarContract.AccountTypeLocal);
            val.Put(CalendarContract.Calendars.Name, "My Calendar");
            val.Put(CalendarContract.Calendars.InterfaceConsts.CalendarDisplayName, "Silverspot");
            val.Put(CalendarContract.Calendars.InterfaceConsts.CalendarColor, Android.Graphics.Color.Red);       
            val.Put(CalendarContract.Calendars.InterfaceConsts.OwnerAccount, AccountName);
            val.Put(CalendarContract.Calendars.InterfaceConsts.Visible, true);
            val.Put(CalendarContract.Calendars.InterfaceConsts.SyncEvents, true);
            uri = uri.BuildUpon()
                .AppendQueryParameter(CalendarContract.CallerIsSyncadapter, "true")
                .AppendQueryParameter(CalendarContract.Calendars.InterfaceConsts.AccountName, AccountName)
                .AppendQueryParameter(CalendarContract.Calendars.InterfaceConsts.AccountType, CalendarContract.AccountTypeLocal)
                .Build();
            var calresult = ContentResolver.Insert(uri, val);

对于布局,我使用CalendarView和ListView来显示所选日期的事件。https://developer.xamarin.com/api/type/Android.Widget.CalendarView/https://developer.xamarin.com/api/type/Android.Widget.ListView/

要填充事件,我使用Adapter。这些是当日期改变时调用的函数。

var eventsUri = CalendarContract.Events.ContentUri;
string[] eventsProjection = {
                CalendarContract.Events.InterfaceConsts.Id,
                CalendarContract.Events.InterfaceConsts.Title,
                CalendarContract.Events.InterfaceConsts.Dtstart,
                CalendarContract.Events.InterfaceConsts.Description
             };
string selection = CalendarContract.Events.InterfaceConsts.Dtstart + " >= ? AND " + CalendarContract.Events.InterfaceConsts.Dtstart + "<= ?";
string[] sourceColumns = {
                    CalendarContract.Events.InterfaceConsts.Title,
                    CalendarContract.Events.InterfaceConsts.Dtstart
                };
int[] targetResources = { Resource.Id.eventTitle, Resource.Id.eventStartDate };
var adapter = new SimpleCursorAdapter(context, Resource.Layout.EventListItem, cursor, sourceColumns, targetResources);
adapter.ViewBinder = new ViewBinder();
listview.Adapter = adapter;
相关文章:
  • 没有找到相关文章