我正在尝试通过日历意图添加事件.但是,我无法弄清楚如何获取刚刚添加的事件的事件ID.
Intent intent = new Intent(Intent.ACTION_EDIT); intent.setType("vnd.android.cursor.item/event"); intent.putExtra("beginTime",sdate.getTime()); intent.putExtra("endTime",edate.getTime()); intent.putExtra("allDay",true); intent.putExtra("rrule","FREQ=YEARLY"); intent.putExtra("title","A Test Event from android app"); intent.putExtra("description","Description here"); intent.putExtra("eventLocation","location here here here");
我在其他资源上广泛阅读,似乎无法找到答案.我尝试了startActivityForResult,但似乎无法让它工作.我尝试的其他方法似乎无法在活动结束前检查它.
解决方法
试试这个解决方案:
import android.content.ContentResolver; import android.content.ContentValues; import android.net.Uri; public class CalenderUtils { /** * Add a new event into a native Google calendar. Add alert notification by setting <code>isRemind</code> as <code>true</code>. * @param cr - ContentResolver * @param title - Event title * @param addInfo - Event description * @param place - Event place * @param status - <code>int</code> This information is sufficient for most entries: tentative (0),confirmed (1) or canceled (2): * @param startDate - <code>long</code> event start time in mls * @param isRemind - <code>boolean</code> need to remind about event before? * @param isMailService - <code>boolean</code>. Adding attendees to the meeting * @return <code>long</code> eventID */ public static long addEventToCalender(ContentResolver cr,String title,String addInfo,String place,int status,long startDate,boolean isRemind,boolean isMailService) { String eventUriStr = "content://com.android.calendar/events"; ContentValues event = new ContentValues(); // id,We need to choose from our mobile for primary its 1 event.put("calendar_id",1); event.put("title",title); event.put("description",addInfo); event.put("eventLocation",place); event.put("eventTimezone","UTC/GMT +2:00"); // For next 1hr long endDate = startDate + 1000 * 60 * 60; event.put("dtstart",startDate); event.put("dtend",endDate); //If it is bithday alarm or such kind (which should remind me for whole day) 0 for false,1 for true // values.put("allDay",1); event.put("eventStatus",status); event.put("hasAlarm",1); Uri eventUri = cr.insert(Uri.parse(eventUriStr),event); long eventID = Long.parseLong(eventUri.getLastPathSegment()); if (isRemind) { String reminderUriString = "content://com.android.calendar/reminders"; ContentValues reminderValues = new ContentValues(); reminderValues.put("event_id",eventID); // Default value of the system. Minutes is a integer reminderValues.put("minutes",5); // Alert Methods: Default(0),Alert(1),Email(2),SMS(3) reminderValues.put("method",1); cr.insert(Uri.parse(reminderUriString),reminderValues); //Uri reminderUri = } if (isMailService) { String attendeuesesUriString = "content://com.android.calendar/attendees"; /********* To add multiple attendees need to insert ContentValues multiple times ***********/ ContentValues attendeesValues = new ContentValues(); attendeesValues.put("event_id",eventID); // Attendees name attendeesValues.put("attendeeName","xxxxx"); // Attendee email attendeesValues.put("attendeeEmail","yyyy@gmail.com"); // Relationship_Attendee(1),Relationship_None(0),Organizer(2),Performer(3),Speaker(4) attendeesValues.put("attendeeRelationship",0); // None(0),Optional(1),required(2),Resource(3) attendeesValues.put("attendeeType",Accepted(1),Decline(2),Invited(3),Tentative(4) attendeesValues.put("attendeeStatus",0); cr.insert(Uri.parse(attendeuesesUriString),attendeesValues); //Uri attendeuesesUri = } return eventID; } }
我从我的项目中复制了这个类,所以欢迎您根据自己的喜好更改名称.
正如您在此处注意到的,您在插入后会收到id值.
如果您需要获得提醒我或与会者的会议ID – 您必须处理来自cr.insert的返回值…然后parce uri long id = Long.parseLong(uri.getLastPathSegment());
这是一个额外的信息:CalendarContract.Events和Calendar chapter