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