将每周事件添加到日历

我想添加一个事件本地Calendar ,在这里我想重复这个事件每个Tuesday直到31 December 2015

 btnWeekly.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Calendar calendar = Calendar.getInstance(); Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .setType("vnd.android.cursor.item/event") .putExtra(Events.TITLE, "Tuesdays") .putExtra(Events.DESCRIPTION, "Tuesday Specials") .putExtra(Events.EVENT_LOCATION, "Lixious Bench") .putExtra(Events.RRULE, "FREQ=WEEKLY;BYDAY=Tu;UNTIL=20151231") .putExtra(Events.DTSTART, calendar.getTimeInMillis()) .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true) .putExtra(CalendarContract.Events.HAS_ALARM, 1) .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY); startActivity(intent); } } 

问题:在日历中显示每个Thursday这个事件,而我在我的代码中使用“ tu

还有一件事情,如果我也想给这个事件的时间如下: from 6:00 pm to 9:00 pm

Solutions Collecting From Web of "将每周事件添加到日历"

你说星期四是重复的,但是我得到的是周四的开始日,每周二重复一遍。 所以我很确定RRULE部分是正确的。

我认为你所要做的就是用Calendar设置实际的开始和结束时间以获得正确的毫秒数,然后用户“beginTime”而不是“dtstart”和“endTime”而不是“dtend”。

 @Override public void onClick(View v) { // If you want the start times to show up, you have to set them Calendar calendar = Calendar.getInstance(); // Here we set a start time of Tuesday the 17th, 6pm calendar.set(2015, Calendar.MARCH, 17, 18, 0, 0); calendar.setTimeZone(TimeZone.getDefault()); long start = calendar.getTimeInMillis(); // add three hours in milliseconds to get end time of 9pm long end = calendar.getTimeInMillis() + 3 * 60 * 60 * 1000; Intent intent = new Intent(Intent.ACTION_INSERT) .setData(Events.CONTENT_URI) .setType("vnd.android.cursor.item/event") .putExtra(Events.TITLE, "Tuesdays") .putExtra(Events.DESCRIPTION, "Tuesday Specials") .putExtra(Events.EVENT_LOCATION, "Lixious Bench") .putExtra(Events.RRULE, "FREQ=WEEKLY;BYDAY=TU;UNTIL=20150428") // to specify start time use "beginTime" instead of "dtstart" //.putExtra(Events.DTSTART, calendar.getTimeInMillis()) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, start) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end) // if you want to go from 6pm to 9pm, don't specify all day //.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true) .putExtra(CalendarContract.Events.HAS_ALARM, 1) .putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY); startActivity(intent); } 

对于星期二,首字母缩写必须是所有资本,即。 TU

 .putExtra(CalendarContract.Events.RRULE, "FREQ=WEEKLY;BYDAY=TU;UNTIL=20151231") 

要给事件的持续时间,你需要添加

 .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,getMillis(begintime)) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, getMillis(endtime)) 

你可以在这里和这里了解更多关于复发规则

在这里,我分享你一个简单的代码希望,将帮助你或引导你:

 Intent intentAlarm = new Intent(getActivity(), AlarmReceiver.class); intentAlarm.putExtra("name", data.getName()); intentAlarm.putExtra("desc", data.getDescription()); intentAlarm.setData(Uri.parse("custom://" + data.getId())); intentAlarm.setAction(String.valueOf(data.getId())); // Create the AlarmManager AlarmManager alarmManager = (AlarmManager) getActivity() .getSystemService(Context.ALARM_SERVICE); // Set the alarm for a particular time alarmManager.set(AlarmManager.RTC_WAKEUP, Calendar_Object .getTimeInMillis(), PendingIntent.getBroadcast( getActivity(), Integer.parseInt(data.getId()), intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));