簡體   English   中英

使用Xamarin Android(7.0)c#創建日歷事件創建事件時出錯

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

嗨,我正在嘗試調試問題,並且確實很掙扎。

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);

它在此行崩潰:var eventUri = ContentResolver.Insert(CalendarContract.Events.ContentUri,eventValues);

錯誤:Java.Lang.IllegalArgumentException:未知的URL內容://com.android.calendar/calendars/-1

我正在測試三星Galaxy Edge G925F

好的,答案很簡單。

  1. 我沒有指定明智的CalendarId,大多數android的默認值為1或3。我會使用3,因為在某些機型上1是為生日事件保留的。 (除非您想要生日,否則。)

  2. 日期格式化程序一直在做一些錯誤的事情。 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; } 

我希望這可以幫助其他人擺脫困境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM