open android calendar with html link

后端 未结 2 986
悲哀的现实
悲哀的现实 2021-01-19 23:47

I need to open the calendar app on my Android Device using a simple html link. I was able to do this in iOS with href=CALSHOW:// is there something similar for android?

2条回答
  •  悲哀的现实
    2021-01-20 00:16

    On Android there are a method more powerful than the ios urls schemas. Intents And it is really really more powerful!

    You can open the calendar or add a calendar event with the Intents (and a lot of other uses like open twitter, share an image on whatsapp, create a note on evernote ... )

    In this link you can find the solution. Take care with android <4.0 because the api of calendar changes and standardizes on Android 4.0. Read this this post too

    To add a calendar event you follow the next code: (this is an example, maybe you not use all of this or perhaps your date format is different)

    /**
     * Creates a calendar event
     * 
     * @param ce calendar event information
     * @return
     */
    protected static boolean createCalendarEvent(Context context, CalendarEventCustomObject ce) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
            return createCalendarEventIceCream(context, ce);
        else
            return createCalendarEventNormal(context, ce);
    }
    
    @SuppressLint("SimpleDateFormat")
    protected static boolean createCalendarEventNormal(Context context, CalendarEventCustomObject ce) {
        try {
            Intent calIntent = new Intent(Intent.ACTION_EDIT);
            calIntent.setType("vnd.android.cursor.item/event");
    
            calIntent.putExtra("title", ce.description);
            calIntent.putExtra("eventLocation", ce.location);
            calIntent.putExtra("description", ce.summary);
            calIntent.putExtra("calendar_id", ce.id);
    
            // Add date info
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
            SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
            Long start = Utils.parseDate(ce.start, df);
            if (start == null) {
                start = Utils.parseDate(ce.start, df2);
                if (start == null)
                    start = System.currentTimeMillis();
            }
            Long end = Utils.parseDate(ce.end, df);
            if (end == null) {
                end = Utils.parseDate(ce.end, df2);
                if (end == null)
                    end = System.currentTimeMillis();
            }
            calIntent.putExtra("beginTime", start);
            calIntent.putExtra("endTime", end);
    
            context.startActivity(calIntent);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
    
    @SuppressLint("NewApi")
    protected static boolean createCalendarEventIceCream(Context context, CalendarEventCustomObject ce) {
        try {
            Intent calIntent = new Intent(Intent.ACTION_INSERT);
            calIntent.setType("vnd.android.cursor.item/event");
    
            // Create intent and add string info
            calIntent.putExtra(Events.TITLE, ce.description);
            calIntent.putExtra(Events.EVENT_LOCATION, ce.location);
            calIntent.putExtra(Events.DESCRIPTION, ce.summary);
            calIntent.putExtra(Events.CALENDAR_ID, ce.id);
    
            // add date info
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
            SimpleDateFormat df2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
            Long start = Utils.parseDate(ce.start, df);
            if (start == null) {
                start = Utils.parseDate(ce.start, df2);
                if (start == null)
                    start = System.currentTimeMillis();
            }
    
            Long end = Utils.parseDate(ce.end, df);
            if (end == null) {
                end = Utils.parseDate(ce.end, df2);
                if (end == null)
                    end = System.currentTimeMillis();
            }
            calIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, start);
            calIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    
            calIntent.setData(CalendarContract.Events.CONTENT_URI);
            ((Activity) context).startActivity(calIntent);
            return true;
        } catch (Exception e) {
            return false;
        }
    }   
    

提交回复
热议问题