Android : 如何在设备日历上添加未来日期事件和提醒?

Android : How to add future date event and reminder on device calendar?

我可以在当前日期设置事件和提醒,但是当我使用未来日期时间戳在日历上设置未来事件时,adding/showing 不是该未来日期的任何事件。这是我添加未来日期事件的代码:

 btnSetEvent.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Date d1 = new Date(1472570400);//Tue, 30 Aug 2016 15:20:00 GMT
            Calendar cal1 = Calendar.getInstance();
            cal1.setTime(d1);

            Date d2 = new Date(1472574000);//Tue, 30 Aug 2016 16:20:00 GMT
            Calendar cal2 = Calendar.getInstance();
            cal2.setTime(d2);

            Uri EVENTS_URI = Uri.parse("content://com.android.calendar/events");
            ContentResolver cr = getContentResolver();

            // event insert
            ContentValues values = new ContentValues();
            values.put("calendar_id", 1);
            values.put("title", "Reminder Title");
            values.put("allDay", 0);
            values.put(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());                

            values.put("dtstart", cal1.getTimeInMillis() ); // event starts at Tue, 30 Aug 2016 15:20:00
            values.put("dtend", cal2.getTimeInMillis()); // ends at Tue, 30 Aug 2016 16:20:00 GMT

            System.out.println("ALARM TIMES START : " + cal1.getTimeInMillis());
            System.out.println("ALARM TIMES END : "+cal2.getTimeInMillis());

            values.put("description", "Reminder description");                
            values.put("hasAlarm", 1);
            Uri event = cr.insert(EVENTS_URI, values);

            // reminder insert                
            Uri REMINDERS_URI = Uri.parse("content://com.android.calendar/reminders");
            values = new ContentValues();
            values.put( "event_id", Long.parseLong(event.getLastPathSegment()));               

            values.put( "method", 1);
            values.put( "minutes", 1); //Notify before the exact time
            cr.insert( REMINDERS_URI, values );
        }
    });
}

提前致谢。

这是因为您输入的长日期有误。我调试它们,它们显示的是 1970 年 1 月 16 日,而不是 2016 年 8 月 30 日。

您不需要使用 Date class。只需致电:

Calendar cal1 = new GregorianCalendar(2016, Calendar.AUGUST, 30, 15, 20);
Calendar cal2 = new GregorianCalendar(2016, Calendar.AUGUST, 30, 16, 20);

此外,如果你有一个长值,你可以调用cal1.setTimeInMillis(millis)