简体   繁体   English

使用Xamarin Android(7.0)c#创建日历事件创建事件时出错

[英]Creating Calender event using Xamarin Android(7.0) c# Error with creating event

Hi I am trying to debug a problem here and really struggling. 嗨,我正在尝试调试问题,并且确实很挣扎。

ContentValues eventValues = new ContentValues();
        eventValues.Put(CalendarContract.Events.InterfaceConsts.CalendarId, -1);
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Title, title);
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Description, desc);
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtstart, GetDateTimeMS(year, month, day, starthr, startmin));
        eventValues.Put(CalendarContract.Events.InterfaceConsts.Dtend, GetDateTimeMS(year, month, day, stophr, stopmin));
        eventValues.Put(CalendarContract.Events.InterfaceConsts.HasAlarm, true);
        eventValues.Put(CalendarContract.Events.InterfaceConsts.EventTimezone, "Local");
        eventValues.Put(CalendarContract.Events.InterfaceConsts.EventEndTimezone, "Local");
        //  eventValues.Put(CalendarContract.Events.InterfaceConsts.AllowedReminders, true);
        var eventUri = ContentResolver.Insert(CalendarContract.Events.ContentUri, eventValues);
        long eventID = long.Parse(eventUri.LastPathSegment);
        ContentValues reminderValues = new ContentValues();
        reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.CalendarId, -1);
        reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.EventId, eventID);
        reminderValues.Put(
              CalendarContract.Reminders.InterfaceConsts.Method,
              (int)RemindersMethod.Alert
            );
        reminderValues.Put(CalendarContract.Reminders.InterfaceConsts.Minutes, 5);

It crashes out at this line: var eventUri = ContentResolver.Insert(CalendarContract.Events.ContentUri, eventValues); 它在此行崩溃:var eventUri = ContentResolver.Insert(CalendarContract.Events.ContentUri,eventValues);

with the error : Java.Lang.IllegalArgumentException: Unknown URL content://com.android.calendar/calendars/-1 错误:Java.Lang.IllegalArgumentException:未知的URL内容://com.android.calendar/calendars/-1

Im testing on a Samsung Galaxy Edge G925F 我正在测试三星Galaxy Edge G925F

Ok the answer was pritty simple. 好的,答案很简单。

  1. I had not specified a sensible CalendarId the default for most androids is 1 or 3. I would use 3 because on some models 1 is reserved for birthday events. 我没有指定明智的CalendarId,大多数android的默认值为1或3。我会使用3,因为在某些机型上1是为生日事件保留的。 (unless its a birthday you want..) (除非您想要生日,否则。)

  2. The date formatter has been doing things a little wrong. 日期格式化程序一直在做一些错误的事情。 Instead of specifiying a month, the JSON pull event was removing leading 0's hence making 09 just 9. This was causing issues so just went ahead and put a if statement and specified the month explicitly. JSON pull事件没有指定一个月,而是删除了前导0,因此使09变为9。这引起了问题,因此继续执行if语句并明确指定了月份。

     long GetDateTimeMS(int yr, int month, int day, int hr, int min) { Java.Util.Calendar c = Java.Util.Calendar.GetInstance(Java.Util.TimeZone.Default); c.Set(Java.Util.Calendar.DayOfMonth,day); c.Set(Java.Util.Calendar.HourOfDay, hr); c.Set(Java.Util.Calendar.Minute, min); if (month == 1) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.January); } else if (month == 2) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.February); } else if (month == 3) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.March); } else if (month == 4) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.April); } else if (month == 5) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.May); } else if (month == 6) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.June); } else if (month == 7) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.July); } else if (month == 8) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.August); } else if (month == 9) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.September); } else if (month == 10) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.October); } else if (month == 11) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.November); } else if (month == 12) { c.Set(Java.Util.Calendar.Month, Java.Util.Calendar.December); } c.Set(Java.Util.Calendar.Year,yr); return c.TimeInMillis; } 

I hope that helps others out of a jam. 我希望这可以帮助其他人摆脱困境。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM