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

时间:2016-08-02 06:32:48

标签: android android-calendar

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

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

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

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

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

如果您有长值,也可以拨打cal1.setTimeInMillis(millis)