2016-04-27 15 views
6

Hinzufügen von Ereignissen für alle Tage zwischen Startdatum und Enddatum in Google Kalender Android. Ich will Rest alle 3 Monate bis Enddatum. Dies ist meine FunktionHinzufügen von Ereignissen für alle Tage zwischen Startdatum und Enddatum in Google Kalender 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); 
     } 

diese Funktion Ereignisse fügt jeden Tag. Wie man das entfernt. Ich brauche nur Rest. Ist irgendetwas in meinem Code falsch? screenshot2

+0

Überprüfen Sie diese [SO Frage] (http://stackoverflow.com/questions/6298235/get-google-calendar-events-start-and-end-times-with-google-java-api-client-in- an? rq = 1) wenn es dir helfen kann :) – KENdi

+0

ist es notwendig, api ?? keine andere Methode ?? – Elizabeth

+0

@Elizabeth gibt es eine Möglichkeit, dass ich Ihnen immer noch helfen kann, ich habe bisher keine Antwort erhalten. – jobbert

Antwort

3

Wenn ich alles richtig lese, möchte ich einen Kalendereintrag alle drei Monate für einen ganzen Tag. Hast du versucht, diese Zeile hinzuzufügen?

contentValues.put(CalendarContract.EXTRA_EVENT_ALL_DAY, true); 

Und änderte das Enddatum eines Kalendereintrags wird currrently bis zum Ende des Jahres eingestellt, während dies das Enddatum des aktuellen Elements sein sollte. DTEND ist das Ende des aktuellen Items DAUER ist das Ende des Reoccuring-Paterns.

Wenn ich das Problem falsch verstanden habe, bitte geben Sie mir eine detaillierte Beschreibung. Für alle Optionen in den Kalendercontracts überprüfen Sie this link.

EDIT:

Sie möchten einen Kalendertermin für jeden Tag, aber der Benutzer alle drei Monate erinnern. Mit Ihrem Code ist das momentan nicht möglich, da Sie für jeden Kalendereintrag mit dieser ID eine Erinnerung hinzufügen (also für jeden Tag). Nur eine einfache Lösung, was ich mir vorstellen kann, ist das Erstellen eines separaten Termins mit einer anderen ID, die Sie alle drei Monate mit einer Erinnerung und einer anderen ID wiederholen. Derzeit ist es nicht möglich, einen Alarm für einige Ereignisse mit derselben ID und einige nicht zu setzen.

+0

Lassen Sie Startdatum sein Januar 1 2016 und Enddatum 1. Januar 2017. Jetzt möchte ich Benachrichtigung am 1. April 2016, 1. Juli 2016, 1. Oktober 2016 und 1. Januar 2017 nur. aber wenn ich meinen Kalender öffne und überprüfe, kann ich sehen, dass jeder Tag markiert ist. was ich nicht möchte. Irgendeine Hilfe??? – Elizabeth

+0

@Elizabeth, willst du nur einen Termin für diese Tage? Wenn ja, setze einfach das Enddatum auf das gleiche Datum wie das Startdatum deines ersten Termins :) – jobbert

+0

wie ?? Ich habe dich nicht bekommen ?? – Elizabeth

Verwandte Themen