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);
我真正想要的是将这些事件添加到自创建的日历中。如何首先创建日历,然后将上述事件添加到日历中?
下面是在设备上创建新日历的示例,摘自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;