2015-03-05 22 views
16

Tôi muốn thêm một sự kiện để có nguồn gốc Calendar, ở đây tôi muốn lặp lại sự kiện này trên tất cả các Tuesday cho đến khi 31 December 2015:Thêm Sự kiện hàng tuần vào Lịch

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

Vấn đề: Trong Lịch nó cho thấy sự kiện này cho mỗi Thursday, trong khi tôi đã sử dụng "tu" trong mã của tôi

Và một điều nữa nếu tôi cũng muốn dành thời gian cho sự kiện này như: from 6:00 pm to 9:00 pm.

+0

tôi thấy bạn có một RRULE nhận xét ra; điều gì đã xảy ra khi bạn sử dụng cái đó? Tò mò kể từ khi các cuộc gọi spec cho TU tất cả các chữ hoa như bạn có. –

+0

@Sun bạn có sử dụng quản lý alram để lặp lại nó không? –

+0

@Vaishali Tôi không muốn sử dụng Báo thức, tôi phải làm điều này với Lịch chỉ – Sun

Trả lời

3

Bạn nói rằng nó cho thấy lặp lại cho thứ năm, nhưng những gì tôi nhận được là một ngày bắt đầu của thứ năm với một lặp lại mỗi thứ ba. Vì vậy, tôi khá chắc chắn phần RRULE là đúng.

Tôi nghĩ tất cả những gì bạn phải làm là đặt thời gian bắt đầu và kết thúc thực tế bằng Lịch để nhận được mili giây đúng, sau đó là người dùng "beginTime" thay vì "dtstart" và "endTime" thay vì "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

Và RRULE bạn có ngay bây giờ sẽ hoạt động phù hợp với điều đó. Bạn chỉ cần thiết lập DTSTART để phù hợp với phần thứ ba. Hãy thử nó! –

+0

Quên dấu phẩy ở cuối; Tôi đã gõ nó theo cách thủ công. Xem câu trả lời được cập nhật. –

+0

Có, chỉ cần làm cho nó thẳng ra. Khóa dự định đã sai đối với thời gian bắt đầu và thời gian kết thúc. Xem câu trả lời cập nhật của tôi. –

0

Ở đây tôi chia sẻ bạn một niềm hy vọng mã đơn giản sẽ giúp bạn hoặc hướng dẫn bạn:

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

Đối với hôm thứ Ba rằng viết tắt phải tất cả tức là vốn. TU

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

Để cung cấp cho thời gian thời gian cho các sự kiện bạn cần phải thêm

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

Bạn có thể tìm hiểu thêm về quy tắc recurrance herehere

Các vấn đề liên quan