Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
C

Calendar-PhoneGap-Plugin

> 编程语言
Open source

:date: Cordova plugin to Create, Change, Delete and Find Events in the native Calendar

771 stars0 likes2 views
WebsiteGitHub

About

:date: Cordova plugin to Create, Change, Delete and Find Events in the native Calendar

PhoneGap Calendar plugin

NPM version Downloads TotalDownloads Twitter Follow

Every now and then kind folks ask me how they can give me all their money. Of course I'm happy to receive any amount but I'm just as happy if you simply 'star' this project.

  1. Description
  2. Installation
    1. Automatically
    2. Manually
    3. PhoneGap Build
  3. Usage
  4. Promises
  5. Credits
  6. License

1. Description

This plugin allows you to add events to the Calendar of the mobile device.

  • Works with PhoneGap >= 3.0.
  • For PhoneGap 2.x, see the pre-3.0 branch.
  • Compatible with Cordova Plugman.
  • Officially supported by PhoneGap Build.

iOS specifics

  • Supported methods: find, create, modify, delete, ..
  • All methods work without showing the native calendar. Your app never loses control.
  • Tested on iOS 6+.
  • On iOS 10+ you need to provide a reason to the user for Calendar access. This plugin adds an empty NSCalendarsUsageDescription key to the /platforms/ios/*-Info.plist file which you can override with your custom string. To do so, pass the following variable when installing the plugin:
cordova plugin add cordova-plugin-calendar --variable CALENDAR_USAGE_DESCRIPTION="This app uses your calendar"

Android specifics

  • Supported methods on Android 4: find, create (silent and interactive), delete, ..
  • Supported methods on Android 2 and 3: create interactive only: the user is presented a prefilled Calendar event. Pressing the hardware back button will give control back to your app.

Windows 10 Mobile

  • Supported methods: createEvent, createEventWithOptions, createEventInteractively, createEventInteractivelyWithOptions only interactively

2. Installation

Automatically

Latest release on npm:

$ cordova plugin add cordova-plugin-calendar

Bleeding edge, from github:

$ cordova plugin add https://github.com/EddyVerbruggen/Calendar-PhoneGap-Plugin.git

Manually

iOS

1. Add the following xml to your config.xml:

xml

	

2. Grab a copy of Calendar.js, add it to your project and reference it in index.html:

xml

3. Download the source files for iOS and copy them to your project.

Copy Calendar.h and Calendar.m to platforms/ios//Plugins

4. Click your project in XCode, Build Phases, Link Binary With Libraries, search for and add EventKit.framework and EventKitUI.framework.

Android

1. Add the following xml to your config.xml:

xml

  

2. Grab a copy of Calendar.js, add it to your project and reference it in index.html:

xml

3. Download the source files for Android and copy them to your project.

Android: Copy Calendar.java to platforms/android/src/nl/xservices/plugins (create the folders/packages). Then create a package called accessor and copy other 3 java Classes into it.

4. Add these permissions to your AndroidManifest.xml:

xml

Note that if you don't want your app to ask for these permissions, you can leave them out, but you'll only be able to use one function of this plugin: createEventInteractively.

PhoneGap Build

Add the following xml to your config.xml to always use the latest npm version of this plugin:

xml

Also, make sure you're building with Gradle by adding this to your config.xml file:

xml

3. Usage

The table gives an overview of basic operation compatibility:

Operation Comment iOS Android Windows
createCalendar yes yes
deleteCalendar yes yes
createEvent silent yes yes * yes **
createEventWithOptions silent yes yes * yes **
createEventInteractively interactive yes yes yes **
createEventInteractivelyWithOptions interactive yes yes yes **
findEvent yes yes
findEventWithOptions yes yes
listEventsInRange yes yes
listCalendars yes yes
findAllEventsInNamedCalendars yes
modifyEvent yes
modifyEventWithOptions yes
deleteEvent yes yes
deleteEventFromNamedCalendar yes
deleteEventById yes yes
openCalendar yes yes
  • * on Android < 4 dialog is shown
  • ** only interactively on windows mobile

Basic operations, you'll want to copy-paste this for testing purposes:

…

Creating an all day event:

javascript
  // set the startdate to midnight and set the enddate to midnight the next day
  var startDate = new Date(2014,2,15,0,0,0,0,0);
  var endDate = new Date(2014,2,16,0,0,0,0,0);

Creating an event for 3 full days

javascript
  // set the startdate to midnight and set the enddate to midnight 3 days later
  var startDate = new Date(2014,2,24,0,0,0,0,0);
  var endDate = new Date(2014,2,27,0,0,0,0,0);

Example Response IOS getCalendarOptions

javascript
{
calendarId: null,
calendarName: "calendar",
firstReminderMinutes: 60,
recurrence: null,
recurrenceEndDate: null,
recurrenceInterval: 1,
secondReminderMinutes: null,
url: null
}

Exmaple Response IOS Calendars

javascript
{
id: "258B0D99-394C-4189-9250-9488F75B399D",
name: "standard calendar",
type: "Local"
}

Exmaple Response IOS Event

javascript
{
calendar: "Kalender",
endDate: "2016-06-10 23:59:59",
id: "0F9990EB-05A7-40DB-B082-424A85B59F90",
lastModifiedDate: "2016-06-13 09:14:02",
location: "",
message: "my description",
startDate: "2016-06-10 00:00:00",
title: "myEvent"
}

Android 6 (M) Permissions

On Android 6 you need to request permission to use the Calendar at runtime when targeting API level 23+. Even if the uses-permission tags for the Calendar are present in AndroidManifest.xml.

Since plugin version 4.5.0 we transparently handle this for you in a just-in-time manner. So if you call createEvent we will pop up the permission dialog. After the user granted access to his calendar the event will be created.

You can also manually manage and check permissions if that's your thing. Note that the hasPermission functions will return true when:

  • You're running this on iOS, or
  • You're targeting an API level lower than 23, or
  • You're using Android < 6, or
  • You've already granted permission.
javascript
  // again, this is no longer needed with plugin version 4.5.0 and up
  function hasReadWritePermission() {
    window.plugins.calendar.hasReadWritePermission(
      function(result) {
        // if this is 'false' you probably want to call 'requestReadWritePermission' now
        alert(result);
      }
    )
  }

  function requestReadWritePermission() {
    // no callbacks required as this opens a popup which returns async
    window.plugins.calendar.requestReadWritePermission();
  }

There are similar methods for Read and Write access only (hasReadPermission, etc), although it looks like that if you request read permission you can write as well, so you might as well stick with the example above.

Note that backward compatibility was added by checking for read or write permission in the relevant plugins functions. If permission is needed the plugin will now show the permission request popup. The user will then need to allow access and invoke the same method again after doing so.

4. Promises

If you like to use promises instead of callbacks, or struggle to create a lot of events asynchronously with this plugin then I encourage you to take a look at this awesome wrapper for this plugin. Kudos to John Rodney for this piece of art!

5. Credits

This plugin was enhanced for Plugman / PhoneGap Build by Eddy Verbruggen. I fixed some issues in the native code (mainly for iOS) and changed the JS-Native functions a little in order to make a universal JS API for both platforms.

  • Inspired by this nice blog of Devgirl.
  • Credits for the original iOS code go to Felix Montanez.
  • Credits for the original Android code go to Ten Forward Consulting and twistandshout.
  • Special thanks to four32c.com for sponsoring part of the implementation, while keeping the plugin opensource.

6. License

The MIT License (MIT)

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Javaagendacalendarcordovaevent

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言