Pedometer
from expo-sensors
uses Core Motion on iOS and the system hardware.Sensor
on Android to get the user's step count, and also allows you to subscribe to pedometer updates.Android Device | Android Emulator | iOS Device | iOS Simulator | Web |
---|---|---|---|---|
→
expo install expo-sensors
If you're installing this in a bare React Native app, you should also follow these additional installation instructions.
import React from 'react'; import { StyleSheet, Text, View } from 'react-native'; import { Pedometer } from 'expo-sensors'; export default class App extends React.Component { state = { isPedometerAvailable: 'checking', pastStepCount: 0, currentStepCount: 0, }; componentDidMount() { this._subscribe(); } componentWillUnmount() { this._unsubscribe(); } _subscribe = () => { this._subscription = Pedometer.watchStepCount(result => { this.setState({ currentStepCount: result.steps, }); }); Pedometer.isAvailableAsync().then( result => { this.setState({ isPedometerAvailable: String(result), }); }, error => { this.setState({ isPedometerAvailable: 'Could not get isPedometerAvailable: ' + error, }); } ); const end = new Date(); const start = new Date(); start.setDate(end.getDate() - 1); Pedometer.getStepCountAsync(start, end).then( result => { this.setState({ pastStepCount: result.steps }); }, error => { this.setState({ pastStepCount: 'Could not get stepCount: ' + error, }); } ); }; _unsubscribe = () => { this._subscription && this._subscription.remove(); this._subscription = null; }; render() { return ( <View style={styles.container}> <Text>Pedometer.isAvailableAsync(): {this.state.isPedometerAvailable}</Text> <Text>Steps taken in the last 24 hours: {this.state.pastStepCount}</Text> <Text>Walk! And watch this go up: {this.state.currentStepCount}</Text> </View> ); } } %%placeholder-start%%const styles = StyleSheet.create({ ... }); %%placeholder-end%%const styles = StyleSheet.create({ container: { flex: 1, marginTop: 15, alignItems: 'center', justifyContent: 'center', }, });
import { Pedometer } from 'expo-sensors';
Name | Type | Description |
---|---|---|
start | Date | A date indicating the start of the range over which to measure steps. |
end | Date | A date indicating the end of the range over which to measure steps. |
Get the step count between two dates.
Returns a promise that fulfills with a PedometerResult
.
As Apple documentation states:
Only the past seven days worth of data is stored and available for you to retrieve. Specifying a start date that is more than seven days in the past returns only the available data.
Returns whether the pedometer is enabled on the device.
Promise<boolean>
Returns a promise that fulfills with a boolean
, indicating whether the pedometer is
available on this device.
Name | Type | Description |
---|---|---|
callback | PedometerUpdateCallback | A callback that is invoked when new step count data is available. The callback is
provided with a single argument that is PedometerResult . |
Subscribe to pedometer updates.
Returns a Subscription
that enables you to call
remove()
when you would like to unsubscribe the listener.
An object obtained by getPermissionsAsync
and requestPermissionsAsync
functions.
Name | Type | Description |
---|---|---|
canAskAgain | boolean | Indicates if user can be asked again for specific permission. If not, one should be directed to the Settings app in order to enable/disable the permission. |
expires | PermissionExpiration | Determines time when the permission expires. |
granted | boolean | A convenience boolean that indicates if the permission is granted. |
status | PermissionStatus | Determines the status of the permission. |
Name | Type | Description |
---|---|---|
steps | number | Number of steps taken between the given dates. |
Name | Type | Description |
---|---|---|
result | PedometerResult | - |
Permission expiration time. Currently, all permissions are granted permamently.
Acceptable values are: 'never'
, number
.
Name | Type | Description |
---|---|---|
remove | () => void | A method to unsubscribe the listener. |
PermissionStatus.UNDETERMINED = "undetermined"
User hasn't granted or denied the permission yet.