2016-04-27 13 views
6

Aggiunta di eventi per tutti i giorni tra la data di inizio e la data di fine nel calendario google Android. Voglio il resto ogni 3 mesi fino alla data di fine. Questa è la mia funzioneAggiunta di eventi per tutti i giorni tra la data di inizio e la data di fine nel calendario di Google Android

public void addEvent1(Context ctx, String title){ 
      SimpleDateFormat df2 = new SimpleDateFormat("dd/MM/yyyy"); 
      SimpleDateFormat df3 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", java.util.Locale.getDefault()); 
      Date Startdate = null; 
      Date Enddate =null; 
      String dtStart = date.getText().toString(); 
      try { 
       Startdate = df2.parse(dtStart); 
       Enddate = df2.parse(stringMaturityDate); 
       Log.v("SDate: ",""+ df3.format(Startdate)); 
       Log.v("EDate: ",""+ df3.format(Enddate)); 
      } catch(ParseException e){ 
       e.printStackTrace(); 
      } 
      Calendar cali = Calendar.getInstance(); 
      cali.setTime(Startdate); 


      Calendar cali2 = Calendar.getInstance(); 
      cali2.setTime(Enddate); 

      SimpleDateFormat yyyymmdd = new SimpleDateFormat("yyyyMMdd"); 
      Calendar dt = Calendar.getInstance(); 


      dt.setTime(Enddate); 

      String dtUntill = yyyymmdd.format(dt.getTime()); 

      ContentResolver contentResolver = ctx.getContentResolver(); 

      ContentValues calEvent = new ContentValues(); 
      calEvent.put(CalendarContract.Events.CALENDAR_ID, 1); // XXX pick) 
      calEvent.put(CalendarContract.Events.TITLE, title); 
      calEvent.put(CalendarContract.Events.RRULE, "FREQ=MONTHLY;INTERVAL=3;UNTIL=" + dtUntill); 
      calEvent.put(CalendarContract.Events.DTSTART, cali.getTimeInMillis()); 
      calEvent.put(CalendarContract.Events.DTEND, cali2.getTimeInMillis()); 

      calEvent.put(CalendarContract.Events.EVENT_TIMEZONE, "" + java.util.Locale.getDefault()); 



      Uri uri = contentResolver.insert(CalendarContract.Events.CONTENT_URI, calEvent); 


       int id = Integer.parseInt(uri.getLastPathSegment()); 
       Toast.makeText(ctx, "Created Calendar Event " + id, 
         Toast.LENGTH_SHORT).show(); 
ContentValues reminders = new ContentValues(); 
     reminders.put(CalendarContract.Reminders.EVENT_ID, id); 
     reminders.put(CalendarContract.Reminders.METHOD, CalendarContract.Reminders.METHOD_ALERT); 
     reminders.put(CalendarContract.Reminders.MINUTES, 10); 

     Uri uri1 = contentResolver.insert(CalendarContract.Reminders.CONTENT_URI, reminders); 
     } 

questa funzione aggiunge eventi ogni giorno. Come rimuoverlo. Ho solo bisogno di resto. C'è qualcosa di sbagliato nel mio codice ?? screenshot1screenshot2

+0

Controlla questa [domanda SO] (http://stackoverflow.com/questions/6298235/get-google-calendar-events-start-and-end-times-with-google-java-api-client-in- un? rq = 1) se può aiutarti :) – KENdi

+0

è necessario usare le API ?? nessun altro metodo ?? – Elizabeth

+0

@Elizabeth c'è un modo in cui posso ancora aiutarti, non ho ricevuto alcuna risposta finora. – jobbert

risposta

3

Se leggo correttamente tutto ciò che si desidera un elemento del calendario ogni albero mesi per un giorno intero. Hai provato ad aggiungere questa linea?

contentValues.put(CalendarContract.EXTRA_EVENT_ALL_DAY, true); 

E cambiato la data di fine di un elemento di calendario è currrently impostato la fine dell'anno mentre questa dovrebbe essere la data di fine dell'elemento corrente. DTEND è la fine dell'articolo corrente DURATION è la fine del patern ricorrente.

Se ho capito male il problema, per favore mi dia una descrizione dettagliata. Per tutte le opzioni nel controllo CalenderContracts this link.

EDIT:

si desidera un appuntamento del calendario per ogni giorno, ma ricordare all'utente ogni tre mesi. Con il tuo codice questo non è al momento possibile poiché stai aggiungendo un promemoria per ogni elemento del calendario con quell'id (quindi per ogni giorno). Solo una soluzione facile a cui posso pensare è creare un appuntamento separato con un altro ID che ripeti ogni tre mesi con un promemoria e un ID diverso. Al momento non è possibile impostare un allarme per alcuni eventi con lo stesso ID e altri no.

+0

data di inizio gennaio 1 gennaio 2016 e data di fine gennaio 1 2017. Ora desidero ricevere le notifiche solo il 1 ° aprile 2016, il 1 ° luglio 2016, il 1 ° ottobre 2016 e il 1 ° gennaio 2017. ma quando apro e controllo il mio calendario posso vedere ogni giorno è segnato. che non voglio. Qualsiasi aiuto??? – Elizabeth

+0

@ Elizabeth, vuoi solo un appuntamento anche per quei giorni? In tal caso, è sufficiente impostare la data di fine alla stessa data della data di inizio del primo appuntamento :) – jobbert

+0

come ?? non ti ho preso ?? – Elizabeth

Problemi correlati