Core Motion Pedometer with Cordova

Core Motion SDK

Since the introduction of iOS 8 and devices such as the iPhone 5s and iPhone 6/Plus, it’s been possible to write a native Objective-C applications to receive core motion data from device hardware and to process that data.

Pedometer

As an advocate of Cordova / PhoneGap, I wanted to bring this functionality to the WebView.

Pedometer plugin for Cordova

I have implemented a Core Motion Pedometer Plugin to facilitate the fetching of pedestrian-related pedometer data, such as step counts and other information about the distance travelled. It really is much more than your average “step counter”.

Add the plugin with the CLI

Latest version:

1
cordova plugin add https://github.com/leecrossley/cordova-plugin-pedometer.git

Last published version (note, I’m a often little lazy on this):

1
cordova plugin add uk.co.ilee.pedometer

You do not need to reference any JavaScript, the Cordova plugin architecture will add a pedometer object to your root automatically.

Check feature support

Some capabilities are not supported on all iOS devices, even with iOS 8, so please ensure you use the check feature support functions.

isStepCountingAvailable

1
pedometer.isStepCountingAvailable(successCallback, failureCallback);
  • => successCallback is called with true if the feature is supported, otherwise false
  • => failureCallback is called if there was an error determining if the feature is supported

isDistanceAvailable

1
pedometer.isDistanceAvailable(successCallback, failureCallback);

Distance estimation indicates the ability to use step information to supply the approximate distance travelled by the user.

This capability is not supported on all devices, even with iOS 8.

isFloorCountingAvailable

1
pedometer.isFloorCountingAvailable(successCallback, failureCallback);

Floor counting indicates the ability to count the number of floors the user walks up or down using stairs.

This capability is not supported on all devices, even with iOS 8.

Live pedometer data

startPedometerUpdates

Starts the delivery of recent pedestrian-related data to your Cordova app.

1
2
3
4
5
6
7
var successHandler = function (pedometerData) {
// pedometerData.numberOfSteps;
// pedometerData.distance;
// pedometerData.floorsAscended;
// pedometerData.floorsDescended;
};
pedometer.startPedometerUpdates(successHandler, onError);

The success handler is executed when data is available and is called repeatedly from a background thread as new data arrives.

When the app is suspended, the delivery of updates stops temporarily. Upon returning to foreground or background execution, the pedometer object begins updates again.

stopPedometerUpdates

Stops the delivery of recent pedestrian data updates to your Cordova app.

1
pedometer.stopPedometerUpdates(successCallback, failureCallback);

More framework features

Not all features of the framework are implemented. If you’d like me to add something else that is available, let me know. Issues and pull requests welcome as always on the git repo.