2015-03-05 5 views
16

Ich mag ein Ereignis zu nativem Calendar hinzufügen würde Kalender, hier i Tuesday bis 31 December 2015 auf jedes dieses Ereignis wiederholt werden soll:Weekly Event hinzufügen

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

Problem: Im Kalender es zeigt dieses Ereignis für alle Thursday, während ich "tu" in meinem Code

verwendet habe Und noch was, wenn ich auch Zeitdauer für dieses Ereignis wie geben möchte: from 6:00 pm to 9:00 pm nur.

+0

ich Ihnen ein RRULE haben sehen hinzufügen müssen geben kommentiert werden; Was ist passiert, als du das benutzt hast? Seltsam, da die Spezifikation für TU alle Großbuchstaben verlangt, wie Sie dort haben. –

+0

@Sun verwenden Sie den alram-Manager, um es zu wiederholen? –

+0

@Vaishali Ich will nicht Alarm verwenden, ich habe diese – Sun

Antwort

3

Du hast gesagt, es zeigte sich am Donnerstag zu wiederholen, aber was ich bekam, war mit einer Wiederholung ein Starttag Donnerstag jeden Dienstag. Ich bin mir ziemlich sicher, dass der RRULE-Teil richtig ist.

Ich denke, alles, was Sie tun müssen, ist die tatsächlichen Start- und Endzeiten mit Kalender setzen, um die richtigen Millisekunden, dann Benutzer "beginTime" anstelle von "dtstart" und "endTime" anstelle von "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

Und die RRULE, die Sie jetzt haben, sollte dafür richtig arbeiten. Sie setzen DTSTART nur auf den Dienstag-Part. Versuch es! –

+0

Am Ende ein Komma vergessen; Ich tippte es manuell ein. Siehe aktualisierte Antwort. –

+0

Ja, ich habe es gerade geklärt. Der Intent-Schlüssel war für Start- und Endzeit falsch. Siehe meine aktualisierte Antwort. –

0

Hier bin ich teilen eine einfache Code-Hoffnung, die Ihnen helfen oder Sie führen:

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

Für Dienstag die Initialen haben alles Kapital also sein. TU

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

Um Zeitdauer für den Fall, dass Sie

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

Sie erfahren mehr über zu Wiederholungen Regel here und here