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 are installing this in an existing React Native app, start by installing expo
in your project. Then, follow the additional instructions as mentioned by the library's README under "Installation in bare React Native projects" section.
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>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
marginTop: 15,
alignItems: 'center',
justifyContent: 'center',
},
});
import { Pedometer } from 'expo-sensors';
Pedometer.getStepCountAsync(start, end)
Parameter | 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.
Pedometer.isAvailableAsync()
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.
Pedometer.requestPermissionsAsync()
Asks the user to grant permissions for accessing pedometer.
Pedometer.watchStepCount(callback)
Parameter | 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 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.
Parameter | Type |
---|---|
result | PedometerResult |
void
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 | A method to unsubscribe the listener. |
PermissionStatus
PermissionStatus Values
UNDETERMINED
PermissionStatus.UNDETERMINED = "undetermined"
User hasn't granted or denied the permission yet.