7

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

此功能每天都会添加事件。如何删除它。我只需要余数。我的代码有什么问题吗? 截图1截图2

4

1 回答 1

4

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

contentValues.put(CalendarContract.EXTRA_EVENT_ALL_DAY, true);

并将一个日历项目的结束日期更改为当前设置为年底,而这应该是当前项目的结束日期。DTEND 是当前项目的结束 DURATION 是重复出现模式的结束。

如果我理解错了问题,请给我详细的描述。对于 CalenderContracts 中的所有选项,请检查此链接

编辑:

您希望每天都有一个日历约会,但每三个月提醒用户一次。使用您的代码,目前这是不可能的,因为您正在为每个具有该 ID 的日历项目添加提醒(所以每天)。我能想到的唯一简单的解决方案是使用另一个 ID 创建一个单独的约会,您每三个月重复一次,并带有一个提醒和一个不同的 ID。目前无法为某些具有相同 id 的事件设置警报,而另一些则没有。

于 2016-05-17T12:10:44.103 回答