Agregar evento semanal al calendario

Me gustaría agregar un evento al Calendar nativo, aquí quiero repetir este evento todos los Tuesday hasta el 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); } } 

Problema: en Calendar muestra este evento todos los Thursday , mientras que he usado ” tu ” en mi código

Y una cosa más, ¿y si también quiero dar la duración del tiempo para este evento como: from 6:00 pm to 9:00 pm solamente.

Dijiste que se repetía para el jueves, pero lo que obtuve fue un día de inicio del jueves con una repetición todos los martes. Así que estoy bastante seguro de que la parte RRULE es correcta.

Creo que todo lo que tienes que hacer es establecer las horas reales de inicio y finalización con Calendar para obtener los milisegundos correctos, luego el usuario “beginTime” en lugar de “dtstart” y “endTime” en lugar de “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); } 

Para el martes, las Iniciales deben ser todas capitales, es decir. TU

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

Para dar tiempo de duración para el evento que necesita agregar

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

Puede obtener más información sobre la regla de recurrencia aquí y aquí

Aquí te estoy compartiendo un código simple que te ayudará o guiará:

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