在谷歌日历Android中添加开始日期和结束日期之间所有日期的事件

时间:2016-04-27 09:16:21

标签: android google-calendar-api calendarcontract

在Google日历Android中为开始日期和结束日期之间的所有日期添加事件。我希望每3个月剩余一次,直到结束日期。 这是我的功能

    public void addEvent1(Context ctx, String title){
            SimpleDateFormat df2 = new SimpleDateFormat("dd/MM/yyyy");
            SimpleDateFormat df3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", java.util.Locale.getDefault());
            Date Startdate = null;
            Date Enddate =null;
            String dtStart = date.getText().toString();
            try {
                Startdate = df2.parse(dtStart);
                Enddate = df2.parse(stringMaturityDate);
                Log.v("SDate: ",""+ df3.format(Startdate));
                Log.v("EDate: ",""+ df3.format(Enddate));
            } catch(ParseException e){
                e.printStackTrace();
            }
            Calendar cali = Calendar.getInstance();
            cali.setTime(Startdate);


            Calendar cali2 = Calendar.getInstance();
            cali2.setTime(Enddate);

            SimpleDateFormat yyyymmdd = new SimpleDateFormat("yyyyMMdd");
            Calendar dt = Calendar.getInstance();


            dt.setTime(Enddate);

            String dtUntill = yyyymmdd.format(dt.getTime());

            ContentResolver contentResolver = ctx.getContentResolver();

            ContentValues calEvent = new ContentValues();
            calEvent.put(CalendarContract.Events.CALENDAR_ID, 1); // XXX pick)
            calEvent.put(CalendarContract.Events.TITLE, title);
            calEvent.put(CalendarContract.Events.RRULE, "FREQ=MONTHLY;INTERVAL=3;UNTIL=" + dtUntill);
            calEvent.put(CalendarContract.Events.DTSTART, cali.getTimeInMillis());
            calEvent.put(CalendarContract.Events.DTEND, cali2.getTimeInMillis());

            calEvent.put(CalendarContract.Events.EVENT_TIMEZONE, "" + java.util.Locale.getDefault());



            Uri uri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, calEvent);


                int id = Integer.parseInt(uri.getLastPathSegment());
               Toast.makeText(ctx, "Created Calendar Event " + id,
                       Toast.LENGTH_SHORT).show();
 ContentValues reminders = new ContentValues();
        reminders.put(CalendarContract.Reminders.EVENT_ID, id);
        reminders.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT);
        reminders.put(CalendarContract.Reminders.MINUTES, 10);

        Uri uri1 = contentResolver.insert(CalendarContract.Reminders.CONTENT_URI, reminders);
        }

此功能每天都会添加事件。如何删除。我只需要rest.Is我的代码有什么问题吗? screenshot1 screenshot2

1 个答案:

答案 0 :(得分:3)

如果我正确地阅读了所有内容,那么您每个树需要一个日历项目一整天。您是否尝试过添加此行?

contentValues.put(CalendarContract.EXTRA_EVENT_ALL_DAY, true);

并且将一个日历项目的结束日期更改为当年年底,而这应该是当前项目的结束日期。 DTEND是当前项目的结尾DURATION是reoccuring patern的结束。

如果我理解错误的问题,请给我详细说明。对于CalenderContracts中的所有选项,请选中this link

修改

您希望每天预约一次,但每三个月会提醒一次用户。使用您的代码时,目前无法进行此操作,因为您要为每个具有该ID的日历项目添加提醒(因此对于每天)。只有简单的解决方案,我能想到的是创建一个单独的约会与另一个ID,你每三个月重复一次提醒和不同的ID。目前无法为具有相同ID但某些事件的某些事件设置警报。