2013-07-22 67 views
0

我想对我编程方式创建这样事件通过代码添加不开

var uri = CalendarContract.Calendars.ContentUri; ContentValues val = new ContentValues(); 

     val.Put(CalendarContract.Calendars.InterfaceConsts.CalendarAccessLevel, CalendarAccess.AccessOwner.ToString()); 
     val.Put(CalendarContract.Calendars.Name, "Mary"); 
     val.Put(CalendarContract.Calendars.InterfaceConsts.Visible, true); 
     val.Put(CalendarContract.Calendars.InterfaceConsts.SyncEvents, true); 
     val.Put(CalendarContract.Calendars.InterfaceConsts.CalendarColor, "0xff00ffff"); 
     val.Put(CalendarContract.Calendars.InterfaceConsts.CalendarDisplayName, "Mary"); 
     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); 

     calID = int.Parse(calresult.LastPathSegment); 
     AddCalendarEvent(calID); 

它成功添加日历添加一个事件,我能看到这个日历

我加入的事件就是这样,

ContentValues eventValues = new ContentValues(); 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.CalendarId, calID); 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.Title, "Test Event from M4A"); 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.Description, "This is an event created from Mono for Android"); 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtstart, GetDateTimeMS(2013, 9, 15, 10, 0)); 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtend, GetDateTimeMS(2013, 9, 15, 11, 0)); 

     // GitHub issue #9 : Event start and end times need timezone support. 
     // https://github.com/xamarin/monodroid-samples/issues/9 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.EventTimezone, "UTC"); 
     eventValues.Put(CalendarContract.Events.InterfaceConsts.EventEndTimezone, "UTC"); 

     var uri = ContentResolver.Insert(CalendarContract.Events.ContentUri, eventValues); 
     Console.WriteLine("Uri for new event: {0}", uri); 

我的问题是,当我试图打开这个事件看到的说明,它给了我一个错误,“Unfortun日历已经停止“。我可以在将事件添加到默认日历时打开该事件。我在创建日历方面做了什么错? 我遵循这个博客的代码http://www.derekbekoe.co.uk/blog/16-using-the-android-4-0-calendar-api#part4,但它仍然给我同样的错误。我正在使用Android 4.2.2

回答

0

问题是日历不喜欢颜色代码集。我使用Android.Graphics.Color.Red而不是颜色的哈希码。它与

0

创建日历时,应该指定OWNER_ACCOUNT。来自Android文档的这个链接显示了插入新日历时必须包含的字段。 (http://developer.android.com/reference/android/provider/CalendarContract.Calendars.html

这与将新事件添加到日历中的情况类似。 (http://developer.android.com/reference/android/provider/CalendarContract.Events.html

此外,它是不是从你的代码清楚,但目前,它看起来像你正在使用的事件默认URI,CalendarContract.Events.ContentUri。您可能还必须构建事件uri,就像创建日历一样,然后在使用ContentResolver.Insert插入事件时使用这个新的uri。