How can I add event to the calendar automatically?

前端 未结 1 1490
Happy的楠姐
Happy的楠姐 2020-12-15 23:55

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

相关标签:
1条回答
  • 2020-12-16 00:24

    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;
    }
    
    0 讨论(0)
提交回复
热议问题