2015-03-05 14 views
16

chciałbym dodać zdarzenie do rodzimej Calendar, tutaj chcę powtórzyć to wydarzenie na każdym Tuesday31 December 2015:Dodaj Weekly wydarzenie do kalendarza

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: w Kalendarzu to pokazywanie tego wydarzenia co Thursday, a ja użyłem "tu" w moim kodzie

I jeszcze jedno co, jeśli chcę również dać czas trwania tego wydarzenia, jak: from 6:00 pm to 9:00 pm tylko.

+0

widzę masz RRULE wykomentowane; co się stało, gdy użyłeś tego? Ciekawe, ponieważ specyfikacja wymaga dużej litery TU, jak tam masz. –

+0

@Sun czy użyłeś menedżera alram, aby to powtórzyć? –

+0

@Vaishali Nie chcę używać alarmu, muszę to zrobić tylko z kalendarzem – Sun

Odpowiedz

3

Powiedziałeś, że to powtórzyło się w czwartek, ale to, co dostałem, było początkiem czwartku z powtórzeniem w każdy wtorek. Więc jestem całkiem pewny, że część RRULE jest właściwa.

Myślę, że wszystko, co musisz zrobić, to ustawić rzeczywisty czas rozpoczęcia i zakończenia za pomocą kalendarza, aby uzyskać właściwe milisekundy, a następnie użytkownik "beginTime" zamiast "dtstart" i "endTime" zamiast "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

A teraz, RRULE, które powinieneś, powinno działać dobrze. Właśnie ustawiasz DTSTART, aby pasował do części wtorkowej. Wypróbuj to! –

+0

Zapomniałem przecinka na końcu; Napisałem to ręcznie. Zobacz zaktualizowaną odpowiedź. –

+0

Tak, właśnie to wyprostowałem. Klucz intencyjny był nieprawidłowy dla czasu rozpoczęcia i zakończenia. Zobacz moją zaktualizowaną odpowiedź. –

0

Tutaj dzielę Ci prosty kod nadzieję, że pomoże lub poprowadzić Cię:

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

na wtorek inicjały musiały być wszystko czyli kapitał. TU

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

Aby dać czas trwania na razie trzeba dodać

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

Możesz dowiedzieć się więcej o nawrotem reguły here i here

Powiązane problemy