Skip to content

Cordova - Events

Cordova applications can listen and react to various events related to the application lifecycle and device hardware interactions. Understanding and using these events is crucial for building responsive and well-behaved hybrid apps.

Here’s a list of important events provided by the Cordova core or commonly used plugins:

Event NameDescription
devicereadyFires when Cordova has fully loaded and its APIs are ready to be used. This is the most important event and should be the entry point for any Cordova-specific initialization.
pauseFires when the application is put into the background (e.g., user switches to another app or locks the screen).
resumeFires when the application is retrieved from the background and brought to the foreground.
backbuttonFires when the user presses the device’s physical or virtual back button (primarily on Android, but some other platforms might support it).
menubuttonFires when the user presses the menu button (less common on modern devices).
searchbuttonFires when the user presses the search button on Android.
volumedownbuttonFires when the user presses the volume down hardware button.
volumeupbuttonFires when the user presses the volume up hardware button.
onlineFires when the application goes online (device gains network connectivity).
offlineFires when the application goes offline (device loses network connectivity). (These are standard HTML5 events, but highly relevant in Cordova)

Note: Some events like startcallbutton and endcallbutton were historically mentioned but are less common or platform-specific. Always check plugin documentation for events provided by specific plugins.

Always attach event listeners using document.addEventListener() or window.addEventListener(). Avoid inline event handlers (e.g., onclick="..." in HTML) as they are generally discouraged and may violate Content Security Policy (CSP) rules.

This is the foundational event. Your application’s main logic that depends on Cordova APIs should start here.

// In your main JavaScript file (e.g., www/js/index.js)
document.addEventListener('deviceready', onDeviceReady, false);
function onDeviceReady() {
// Cordova is now initialized. Plugins are ready.
console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
console.log('Device is ready!');
// Initialize your app, attach other event listeners, etc.
document.getElementById('app').innerHTML = 'Device is ready!'; // Example update
// Example: Attach listener for pause event
document.addEventListener('pause', onPause, false);
document.addEventListener('resume', onResume, false);
document.addEventListener('backbutton', onBackButton, true); // `true` for capture phase if needed, usually false
}

Useful for saving state, pausing activities (like games or media), or releasing resources when the app is backgrounded, and restoring them when it resumes.

function onPause() {
console.log('App paused');
// TODO: Pause ongoing tasks, save state, release resources (e.g., camera, GPS).
}
function onResume() {
console.log('App resumed');
// TODO: Resume tasks, restore state, re-acquire resources if needed.
// Example: Check for network status or refresh data.
}

Example: Handling the backbutton (Android)

Section titled “Example: Handling the backbutton (Android)”

By default, the back button on Android exits the application. You can override this behavior to implement custom navigation (e.g., go to a previous screen within your app, close a modal) or to ask for confirmation before exiting.

function onBackButton(event) {
console.log('Back button pressed');
// To prevent the default action (exiting the app), call preventDefault().
event.preventDefault();
// Example: Simple confirm dialog before exiting
if (confirm("Are you sure you want to exit?")) {
// `navigator.app.exitApp()` is a Cordova API to close the app programmatically.
if (navigator.app && navigator.app.exitApp) {
navigator.app.exitApp();
} else {
console.warn('navigator.app.exitApp not available. This might be a browser environment or missing plugin.');
}
} else {
console.log('Exit cancelled by user.');
// Do nothing, or handle other back navigation logic for your app's UI.
}
}

Important: If you override the backbutton event, you become responsible for all back navigation logic. If you don’t call event.preventDefault(), the default behavior will still occur after your handler runs. If you do call preventDefault(), ensure your app provides a way to navigate back or exit when appropriate.

You can listen to hardware volume button presses to implement custom volume controls or other actions.

// Inside onDeviceReady or another appropriate initialization point
document.addEventListener("volumeupbutton", onVolumeUp, false);
document.addEventListener("volumedownbutton", onVolumeDown, false);
function onVolumeUp() {
alert('Volume Up Button pressed!');
// Implement custom logic, e.g., increase app-specific volume
}
function onVolumeDown() {
alert('Volume Down Button pressed!');
// Implement custom logic, e.g., decrease app-specific volume
}

Note: Overriding volume buttons might interfere with the OS’s native volume handling. Use with caution and primarily for in-app volume adjustments if the default behavior is not desired for your specific context (e.g., a game).

  • deviceready is paramount: Almost all Cordova-related event listeners (especially those for hardware buttons or plugin events) should be registered within or after the deviceready handler to ensure the Cordova environment is fully initialized.
  • Platform Differences: Not all events are supported on all platforms. For example, backbutton is primarily an Android concept. Always test on your target platforms.
  • Event Propagation: Understand how events propagate (bubbling and capturing). The third argument to addEventListener (useCapture, defaults to false) can control this.
  • Removing Listeners: If you add an event listener, especially on specific DOM elements or for events that fire frequently, remember to remove it with removeEventListener when it’s no longer needed (e.g., when a view is destroyed) to prevent memory leaks or unintended behavior.
  • Content Security Policy (CSP): As mentioned, use addEventListener. Inline JavaScript (<button onclick="myFunction()">) is generally bad practice and might be blocked by your CSP.
  • Plugin-Specific Events: Many Cordova plugins emit their own custom events. Always consult the documentation for the plugins you use to see if they offer events you can subscribe to.

By effectively using Cordova events, you can create applications that integrate smoothly with the device’s capabilities and provide a more native-like user experience.