studio crear calendario agenda android android-intent calendar android-calendar

android - crear - Agregar evento semanal al calendario



agenda calendario android studio (3)

Aquí les comparto un código simple, espero que los ayude o los guíe:

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

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, ¿qué pasa si también quiero dar tiempo de duración para este evento como: from 6:00 pm to 9:00 pm solo.


Dijiste que se repetía 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 tiene que hacer es configurar las horas de inicio y finalización reales 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 tienen que ser todas capitales. TU

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

Para indicar la duración del evento, debe 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 here y here