2015-03-05 15 views
16

Vorrei aggiungere un evento nativo Calendar, qui voglio ripetere questo evento su ogni Tuesday fino 31 December 2015:Aggiungi evento settimanale al calendario

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: Nel Calendario è mostrare questo evento per ogni Thursday, mentre ho usato "tu" nel mio codice

E ancora una cosa cosa succede se voglio anche dare durata per questo evento come: from 6:00 pm to 9:00 pm solo.

+0

Vedo che hai una RRULE commentata; cosa è successo quando hai usato quello? Curioso dal momento che le specifiche richiedono la TU in maiuscolo come in questo caso. –

+0

@Sun hai usato alram manager per ripeterlo? –

+0

@Vaishali Non voglio usare Alarm, devo farlo solo con Calendar – Sun

risposta

3

Hai detto che è stato ripetuto per giovedì, ma quello che ho ottenuto è stato un inizio di giovedì con una ripetizione ogni martedì. Quindi sono abbastanza sicuro che la parte RRULE sia giusta.

Penso che tutto ciò che dovete fare è impostare le ore di inizio e fine effettive con Calendario per ottenere i millisecondi giusti, quindi l'utente "beginTime" invece di "dtstart" e "endTime" invece di "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); 
} 
+0

E il RRULE che hai adesso dovrebbe funzionare bene per quello. Stai solo impostando DTSTART per abbinare la parte di martedì. Provalo! –

+0

Hai dimenticato una virgola alla fine; L'ho inserito manualmente Vedi risposta aggiornata. –

+0

Sì, l'ho appena risolto. La chiave di intenti era sbagliata per ora di inizio e ora di fine. Vedi la mia risposta aggiornata. –

0

Qui ti sto condividendo un semplice codice speranza che vi aiuterà o guidare:

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

Per Martedì le iniziali deve essere tutto vale a dire il capitale. TU

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

Per dare durata di tempo per l'evento è necessario aggiungere

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

Si può imparare di più su regola recurrance here e here

Problemi correlati