A library that provides access to the device's pedometer sensor.
Pedometer
from expo-sensors
uses the system hardware.Sensor
on Android and Core Motion on iOS 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 |
---|---|---|---|---|
-
npx expo install expo-sensors
If you're installing this in a bare React Native app, you should also follow these additional installation instructions.
import { useState, useEffect } from 'react';
import { StyleSheet, Text, View } from 'react-native';
import { Pedometer } from 'expo-sensors';
export default function App() {
const [isPedometerAvailable, setIsPedometerAvailable] = useState('checking');
const [pastStepCount, setPastStepCount] = useState(0);
const [currentStepCount, setCurrentStepCount] = useState(0);
const subscribe = async () => {
const isAvailable = await Pedometer.isAvailableAsync();
setIsPedometerAvailable(String(isAvailable));
if (isAvailable) {
const end = new Date();
const start = new Date();
start.setDate(end.getDate() - 1);
const pastStepCountResult = await Pedometer.getStepCountAsync(start, end);
if (pastStepCountResult) {
setPastStepCount(pastStepCountResult.steps);
}
return Pedometer.watchStepCount(result => {
setCurrentStepCount(result.steps);
});
}
};
useEffect(() => {
const subscription = subscribe();
return () => subscription && subscription.remove();
}, []);
return (
<View style={styles.container}>
<Text>Pedometer.isAvailableAsync(): {isPedometerAvailable}</Text>
<Text>Steps taken in the last 24 hours: {pastStepCount}</Text>
<Text>Walk! And watch this go up: {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';
Pedometer.getStepCountAsync(start, end)
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
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.
Pedometer.isAvailableAsync()
Returns whether the pedometer is enabled on the device.
Returns
Promise<boolean>
Returns a promise that fulfills with a boolean
, indicating whether the pedometer is
available on this device.
Pedometer.requestPermissionsAsync()
Asks the user to grant permissions for accessing pedometer.
Returns
Pedometer.watchStepCount(callback)
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 |
Subscribe to pedometer updates.
Returns
Returns a Subscription
that enables you to call
remove()
when you would like to unsubscribe the listener.
PermissionResponse
An object obtained by permissions get and request functions.
PermissionResponse Properties
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. |
PedometerResult
Name | Type | Description |
---|---|---|
steps | number | Number of steps taken between the given dates. |
PedometerUpdateCallback()
Callback function providing event result as an argument.
Name | Type | Description |
---|---|---|
result | PedometerResult | - |
PermissionExpiration
Literal Type: multiple types
Permission expiration time. Currently, all permissions are granted permanently.
Acceptable values are: 'never'
number
Subscription
Name | Type | Description |
---|---|---|
remove | () => void | - |
PermissionStatus
PermissionStatus Values
UNDETERMINED
PermissionStatus.UNDETERMINED = "undetermined"
User hasn't granted or denied the permission yet.