以编程方式在android日历中创建带有规则的事件

以编程方式在android日历中创建带有规则的事件,android,android-calendar,Android,Android Calendar,我正在android日历中创建一个具有重复规则的事件。代码如下:- public long createEvents_Usertimelineview() { ContentResolver cr = getContentResolver(); Calendar calendar = Calendar.getInstance(Locale.getDefault()); long calID = 11; long startMillis = 0; long

我正在android日历中创建一个具有重复规则的事件。代码如下:-

public long createEvents_Usertimelineview()
{
    ContentResolver cr = getContentResolver();
    Calendar calendar = Calendar.getInstance(Locale.getDefault());
    long calID = 11;
    long startMillis = 0; 
    long endMillis = 0;

    String startdate_arr[]= {"2015", "05", "12"};
    String starttime_arr[]={"14", "00", "00"};


    calendar.set(Integer.parseInt(startdate_arr[0]),Integer.parseInt(startdate_arr[1])-1,
            Integer.parseInt(startdate_arr[2]),Integer.parseInt(starttime_arr[0]),
            Integer.parseInt(starttime_arr[1]),Integer.parseInt(starttime_arr[2])); // start Time: 00, 01,59

    startMillis = calendar.getTimeInMillis();   


    String  startdate_arr1[]=  {"2015", "05", "12"};
    String  starttime_arr1[]=  {"15", "30", "00"};

    calendar.set(Integer.parseInt(startdate_arr1[0]),Integer.parseInt(startdate_arr1[1])-1,
            Integer.parseInt(startdate_arr1[2]),Integer.parseInt(starttime_arr1[0]),
            Integer.parseInt(starttime_arr1[1]),Integer.parseInt(starttime_arr1[2])); //End Time: 23, 58,00


    endMillis = calendar.getTimeInMillis();

    Calendar calendar2=Calendar.getInstance(Locale.getDefault());
    calendar2.setTimeInMillis(startMillis-endMillis);


    ContentValues values = new ContentValues();
    values.put(CalendarContract.Events.DTSTART, startMillis);
    values.put(CalendarContract.Events.DTEND, endMillis);
    values.put(CalendarContract.Events.TITLE, "My Grand Demo Event");
    values.put(CalendarContract.Events.DESCRIPTION, "");
    values.put(CalendarContract.Events.CALENDAR_ID, calID);
    values.put(CalendarContract.Events.EVENT_TIMEZONE,TimeZone.getDefault().getID());
    values.put(CalendarContract.Events.ALL_DAY, 0);
    values.put(CalendarContract.Events.AVAILABILITY, "usertimelinedata");

    TimeZone timeZone = TimeZone.getDefault();
    values.put(CalendarContract.Events.EVENT_TIMEZONE, timeZone.getID());
    values.put(CalendarContract.Events.RRULE,"FREQ=WEEKLY;COUNT=16;BYDAY=TU");

    values.put(CalendarContract.Events.HAS_ALARM,0);

        values.put(CalendarContract.Events.ORGANIZER,"");

    values.put(CalendarContract.Events.EVENT_LOCATION,"");
    Uri uri = cr.insert(CalendarContract.Events.CONTENT_URI, values);

    long eventID = Long.parseLong(uri.getLastPathSegment());
    Log.e("","Event generate id.. "+eventID);

    return eventID;

}
现在,该活动创建得非常好。问题是,在android日历中,该事件仅显示几周,几周后它不会在日历中查看,而根据其rrule,它应该显示16次。 活动开始日期为2015年5月12日,且永不结束。同样,对于所有具有rrule的事件,也会发生相同的问题。只有HTC desire设备以完美的方式展示了事件,而问题出现在moto g和三星设备上。请帮忙解决这个问题。。。!

当我滑动日历时,此事件不再发生


尝试设置事件持续时间而不是DTEND。 因此,注释此行values.put(CalendarContract.Events.DTEND,endMillis); 添加此行值.put(CalendarContract.Events.DURATION,“PT1H”);
PT1H表示1小时。这是RFC 545格式。

您能总结一下您的问题吗?我已经非常详细和简单地解释了这个问题。如果你有任何疑问,请告诉我。西纳雷,你有什么解决办法吗?这个世界上没有人能解决这样的问题吗?嘿,如果你对创建合适的RRULE感到困惑,那么你可以使用这个网站。谢谢你的回答,但我必须把endMillis放在这行。如何将endMillis转换为pt1H格式?请建议我……我不知道怎么做。我的申请需要1小时的活动。您可以在这里阅读有关RFC5545的信息。