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?
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;
}
}