我无法找到解决问题的方法。我想在我的Android日历中添加多个事件,但我不知道如何。我发现了这段代码:
Calendar cal = Calendar.getInstance();
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra("beginTime", cal.getTimeInMillis());
intent.putExtra("allDay", true);
intent.putExtra("rrule", "FREQ=YEARLY");
intent.putExtra("endTime", cal.getTimeInMillis()+60*60*1000);
intent.putExtra("title", "A Test Event from android app"+String.valueOf(i));
startActivity(intent);
但它只是将我发送到我的日历并让我编辑并手动插入我的活动。我想自动插入事件,而无需转到我的日历应用程序。而且,我只能使用此代码添加一个事件。这不是我想要的。 我有2个String数组,一个包含日期,另一个包含事件的名称。 有谁知道有没有办法做到这一点?我一直在寻找解决方案很长一段时间没有找到解决方案。如果有人帮助过我,我将不胜感激。谢谢!
我已经解决了这个问题!非常感谢你!但现在我有另一个我无法解决的问题。 我有这段代码:
ContentValues cv = new ContentValues();
cv.put("calendar_id", calIds[0]);
cv.put("title", title);
//cv.put("dtstart", dtstart );
//cv.put("dtend", dtend);
cv.put("rrule", "FREQ=MONTHLY");
cv.put("description", comment );
Calendar start = Calendar.getInstance();
start.set(2012, 0, 2, 8, 0, 0);
Calendar end = Calendar.getInstance();
end.set(2012, 0, 2, 9, 0, 0);
long startTime = start.getTimeInMillis();
long endTime = end.getTimeInMillis();
cv.put("dtstart", startTime);
cv.put("dtend", endTime);
//Insertion on the events of the calendar
cr.insert(Uri.parse("content://com.android.calendar/events"), cv);
它会插入我的事件,但它不会重复出现。我的意思是我的活动出现在2jan2012但是在2jan2013上没有,2014年也没有,依此类推。所以我在手机上打开了我的日历,并尝试编辑我的活动,我看到我应该选择它的出现位置,它显示在2012年1月2日而不是1月2日,因为它应该从我的自定义我的活动电话。另一方面,如果我尝试从手机手动添加事件,它可以正常工作(我的意思是我可以添加每年发生的事件)。
答案 0 :(得分:5)
public String addEvent(String calendarId, String title, long startTime,
long endTime, int allDay) {
ContentValues event = new ContentValues();
event.put("calendar_id", calendarId); // "" for insert
event.put("title", title);
event.put("description", "");
event.put("eventLocation", "");
event.put("allDay", allDay);
event.put("eventStatus", 1);
event.put("transparency", 0);
event.put("dtstart", startTime);
event.put("dtend", endTime);
ContentResolver contentResolver = this.context.getContentResolver();
Uri eventsUri = Uri.parse("content://com.android.calendar/calendars");
Uri url = contentResolver.insert(eventsUri, event);
String ret = url.toString();
return ret;
}
当您成功插入一个事件时,一个字符串表示ContentResolver.insert返回的事件的uri,您可以稍后查询,更新或删除它。在SDK 8之前的早期SDK中,日历的内容uri是“content:// calendar / calendars”,它与SDK 8及之后不同。
同时,要小心那些自定义的roms。由于SDK文档中未记录日历API,因此某些供应商和运营商可能会修改甚至删除日历提供程序,因此您可能必须针对大量设备测试您的应用程序。
祝你好运!
答案 1 :(得分:0)
public Uri createEvent(int calId, ICalEvent event) {
ContentValues eventValues = new ContentValues();
eventValues.put("calendar_id", calId);
eventValues.put("title", event.getSummary());
eventValues.put("description", event.getDescription());
eventValues.put("eventLocation", event.getLocation());
// eventValues.put("UID", "ADE52556e6976657273697465323031302f323031312d323637392d302d3131");
// originalEvent
eventValues.put("originalEvent", event.getUid() + ";" + event.getLastModif().getTime() );
long startTime = event.getStart().getTime();//System.currentTimeMillis() + 1000 * 60 * 60;
long endTime = event.getEnd().getTime();//System.currentTimeMillis() + 1000 * 60 * 60 * 2;
eventValues.put("dtstart", (event.isWholeDayEvent() ? endTime : startTime));
eventValues.put("dtend", endTime);
eventValues.put("allDay", (event.isWholeDayEvent() ? 1 : 0)); // 0 for false, 1 for true
eventValues.put("eventStatus", 1);
eventValues.put("visibility", 0);
eventValues.put("transparency", 0);
eventValues.put("hasAlarm", 0); // 0 for false, 1 for true
System.out.println("USING SYNC ACCOUNT " + sync_account);
eventValues.put("_sync_account_type", sync_account);
Uri eventsUri = Uri.parse(getCalendarUriBase()+"events");
Uri insertedUri = activity.getContentResolver().insert(eventsUri, eventValues);
return insertedUri;
}