Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I add event to the calendar automatically?

How can i add event to the calendar automatically? If I use this source code, it opens Calendar with filled entries, but I must click on save button to save it.

public class CalendarApplicationActivity extends Activity
{  

public static final String[] EVENT_PROJECTION = new String[] 
{  
        Calendars._ID, // 0  
        Calendars.ACCOUNT_NAME, // 1  
        Calendars.CALENDAR_DISPLAY_NAME // 2  
};  


private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;  

@Override 
public void onCreate(Bundle savedInstanceState)
{  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_calendar_application);  
}  

public void onClick(View view) 
{  

    Intent intent = new Intent(Intent.ACTION_INSERT);  
    intent.setType("vnd.android.cursor.item/event");  
    intent.putExtra(Events.TITLE, "Learn Android");  
    intent.putExtra(Events.EVENT_LOCATION, "Home suit home");  
    intent.putExtra(Events.DESCRIPTION, "Download Examples");  

    GregorianCalendar calDate = new GregorianCalendar(2012, 10, 02);  
    intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME,  
            calDate.getTimeInMillis());  
    intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME,  
            calDate.getTimeInMillis());  

    intent.putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, true);  


    intent.putExtra(Events.ACCESS_LEVEL, Events.ACCESS_PRIVATE);  
    intent.putExtra(Events.AVAILABILITY, Events.AVAILABILITY_BUSY);  

    startActivity(intent);  

}  


}
like image 757
ebruszl Avatar asked Apr 17 '13 19:04

ebruszl


2 Answers

I post you this code that is used in one of my app in the market. It adds automatically event to the user calendar. It doesn't use Intent that requires an user action.

public void addEvent(CalendarEvent evt) {
    //Log.d(Params.LOG_APP, "Insert event ["+evt+"]");

    try {
        Uri evtUri = ctx.getContentResolver().insert(getCalendarUri("events"), CalendarEvent.toContentValues(evt));
        Log.d(Params.LOG_APP, "" + evtUri);
    }
    catch(Throwable t) {
        //Log.e(Params.LOG_APP, "", t);
    }
}

public void setContext(Context context) {
    this.ctx = context;
    this.baseUri = getCalendarUriBase();
}

private Uri getCalendarUri(String path) {
    return Uri.parse(baseUri + "/" + path);
}

private String getCalendarUriBase() {
    String calendarUriBase = null;
    Uri calendars = Uri.parse("content://calendar/calendars");
    Cursor managedCursor = null;
    try {
        managedCursor = ctx.getContentResolver().query(calendars, null, null, null, null);
    } catch (Exception e) {
       // e.printStackTrace();
    }

    if (managedCursor != null) {
        calendarUriBase = "content://calendar/";
    } else {
        calendars = Uri.parse("content://com.android.calendar/calendars");
        try {
            managedCursor = ctx.getContentResolver().query(calendars, null, null, null, null);
        } catch (Exception e) {
           // e.printStackTrace();
        }

        if (managedCursor != null) {
            calendarUriBase = "content://com.android.calendar/";
        }

    }

    Log.d(Params.LOG_APP, "URI ["+calendarUriBase+"]");
    return calendarUriBase;
}

And for ICS and later

public void addEvent(CalendarEvent evt) {

    ContentResolver cr = context.getContentResolver();
    Uri uri = cr.insert(Events.CONTENT_URI, CalendarEvent.toICSContentValues(evt));
    System.out.println("Event URI ["+uri+"]");

}

CalendarEvent is like

public static ContentValues toContentValues(CalendarEvent evt) {
    ContentValues cv = new ContentValues();
    cv.put("calendar_id", evt.getIdCalendar());
    cv.put("title", evt.getTitle());
    cv.put("description", evt.getDescr());
    cv.put("eventLocation", evt.getLocation());
    cv.put("dtstart", evt.getStartTime());
    cv.put("dtend", evt.getEndTime());
    cv.put("eventStatus", 1);
    cv.put("visibility", 0);
    cv.put("transparency", 0);

    return cv;

}

public static ContentValues toICSContentValues(CalendarEvent evt) {

    ContentValues cv = new ContentValues();
    cv.put(Events.CALENDAR_ID, evt.getIdCalendar());
    cv.put(Events.TITLE, evt.getTitle());
    cv.put(Events.DESCRIPTION, evt.getDescr());
    cv.put(Events.EVENT_LOCATION, evt.getLocation());
    cv.put(Events.DTSTART, evt.getStartTime());
    cv.put(Events.DTEND, evt.getEndTime());

    Calendar cal = Calendar.getInstance();
    TimeZone tz = cal.getTimeZone();

    cv.put(Events.EVENT_TIMEZONE, tz.getDisplayName());
    /*
    cv.put(Events.STATUS, 1);
    cv.put(Events.VISIBLE, 0);
    cv.put("transparency", 0);

    return cv;
    */

    return cv;
}
like image 100
FrancescoAzzola Avatar answered Oct 20 '22 20:10

FrancescoAzzola


I have used Following code to add event in my own created calendar

public void SyncEvent(long id, int meeting_id, String EventName,
   String Stime, String Etime, String Description) {

 Calendar cal = Calendar.getInstance();
 cal.setTimeZone(TimeZone.getTimeZone("GMT-1"));
 Date dt = null;
 Date dt1 = null;
 try {
  dt = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(Stime);
  dt1 = new SimpleDateFormat("yyyy-MM-dd HH:mm").parse(Etime);

  Calendar beginTime = Calendar.getInstance();
  cal.setTime(dt);

  // beginTime.set(2013, 7, 25, 7, 30);
  beginTime.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
  cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY),
  cal.get(Calendar.MINUTE));

  Calendar endTime = Calendar.getInstance();
  cal.setTime(dt1);

  // endTime.set(2013, 7, 25, 14, 30);
  // endTime.set(year, month, day, hourOfDay, minute);
  endTime.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
  cal.get(Calendar.DATE), cal.get(Calendar.HOUR_OF_DAY),
  cal.get(Calendar.MINUTE));

  ContentResolver cr = this.mContext.getContentResolver();
  ContentValues values = new ContentValues();

  values.put(Events.DTSTART, beginTime.getTimeInMillis());
  values.put(Events.DTEND, endTime.getTimeInMillis());
  values.put(Events.TITLE, EventName);
  values.put(Events.DESCRIPTION, Description);
  values.put(Events.CALENDAR_ID, id);
  // values.put(Events._ID, meeting_id);
  values.put(Events.EVENT_TIMEZONE, TimeZone.getDefault().getID());

  Uri uri = cr.insert(Events.CONTENT_URI, values);
  long eventID = Long.parseLong(uri.getLastPathSegment());
 } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
}
like image 38
Dhruvit Darji Avatar answered Oct 20 '22 19:10

Dhruvit Darji