Android中的Xamarin App设置事件导致日历崩溃

时间:2014-03-25 23:02:00

标签: c# android calendar xamarin

我正在使用以下代码设置日历活动。

该活动进入所选日历,但当我点击日历中的活动时,我得到了#34;不幸的是,日历已停止工作。"崩溃。

setCalendarEvent.Click += (object sender, EventArgs e) => {

        //Set

         //Create Event code
        ContentValues eventValues = new ContentValues ();
        eventValues.Put(CalendarContract.Events.InterfaceConsts.CalendarId, _calId);
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Title, "New Sample Event");
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Description, "Sample Description");
        eventValues.Put(CalendarContract.Events.InterfaceConsts.EventTimezone, "Local");
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtstart, GetDateTimeMS(date.Year, date.Month, date.Day, hour, minute));
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtend, GetDateTimeMS(date.Year, date.Month, date.Day, (hour + 1), minute));

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

        long eventID = long.Parse(uri.LastPathSegment);

        ContentValues reminderValues = new ContentValues();
        //reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.CalendarId, _calId);
        reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.EventId, eventID);
        reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.Method, RemindersMethod.Alert.ToString());
        reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.Minutes, 15);

        var reminderUri = ContentResolver.Insert(CalendarContract.Reminders.ContentUri, reminderValues);
        Console.WriteLine("Uri for new event: {0}", reminderUri);
    };

我猜测我传递的事件数据有问题,但我无法弄清楚丢失的是什么或导致问题。有一段时间,有时候,在日历应用程序崩溃之前,我可以看到一个提示,询问用户是否参加了Yes,No和Maybe作为选项。不确定这是否有帮助。

3 个答案:

答案 0 :(得分:0)

不确定,但您可以尝试将此添加到您的活动附加内容

.PutExtra(CalendarContract.Events.InterfaceConsts.AllowedReminders,true)

答案 1 :(得分:0)

我刚刚遇到了这个问题,我的情况可能会因为我使用Task运行代码而有所不同。但要使其工作,我必须使用

在UI线程上显式运行插入代码
Activity.RunOnUiThread(() => {});

我希望这为其他人节省一些时间

答案 2 :(得分:-1)

            var reminderValues = new ContentValues();
            reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.EventId, eventID);
            reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.Method, (int)RemindersMethod.Alert);
            reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.Minutes, 5);

                }

只需要更改InterfaceConsts.Method部分