以编程方式在 android 日历中创建具有规则的事件
Create event with rule in android calendar programatically
我正在 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 日历中,此事件仅显示几周,几周后它不会在日历中查看,而根据其规则它应该显示 16 次。
活动的开始日期是 2015 年 5 月 12 日,并且永远不会结束。同样,所有具有规则的事件都会发生同样的问题。当 moto g 和三星设备出现问题时,只有 HTC 希望设备以完美的方式显示事件。请帮忙解决这个问题...!
当我滑动日历时,这个事件就没有了..
尝试设置事件持续时间而不是 DTEND。
所以注释这一行 values.put(CalendarContract.Events.DTEND, endMillis);
添加此行 values.put(CalendarContract.Events.DURATION, "PT1H");
PT1H 表示 1 小时。它是 RFC 545 格式。
我正在 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 日历中,此事件仅显示几周,几周后它不会在日历中查看,而根据其规则它应该显示 16 次。
活动的开始日期是 2015 年 5 月 12 日,并且永远不会结束。同样,所有具有规则的事件都会发生同样的问题。当 moto g 和三星设备出现问题时,只有 HTC 希望设备以完美的方式显示事件。请帮忙解决这个问题...!
当我滑动日历时,这个事件就没有了..
尝试设置事件持续时间而不是 DTEND。 所以注释这一行 values.put(CalendarContract.Events.DTEND, endMillis); 添加此行 values.put(CalendarContract.Events.DURATION, "PT1H"); PT1H 表示 1 小时。它是 RFC 545 格式。