Barometer
from expo-sensors
provides access to the device barometer sensor to respond to changes in air pressure. pressure
is measured in hectopascals
or hPa
.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, { useState, useEffect } from 'react'; import { StyleSheet, Text, TouchableOpacity, View, Platform } from 'react-native'; import { Barometer } from 'expo-sensors'; export default function App() { const [data, setData] = useState({}); useEffect(() => { _toggle(); }, []); useEffect(() => { return () => { _unsubscribe(); }; }, []); const _toggle = () => { if (this._subscription) { _unsubscribe(); } else { _subscribe(); } }; const _subscribe = () => { this._subscription = Barometer.addListener(barometerData => { setData(barometerData); }); }; const _unsubscribe = () => { this._subscription && this._subscription.remove(); this._subscription = null; }; const { pressure = 0, relativeAltitude = 0 } = data; return ( <View style={styles.sensor}> <Text>Barometer:</Text> <Text>Pressure: {pressure * 100} Pa</Text> <Text> Relative Altitude:{' '} {Platform.OS === 'ios' ? `${relativeAltitude} m` : `Only available on iOS`} </Text> <View style={styles.buttonContainer}> <TouchableOpacity onPress={_toggle} style={styles.button}> <Text>Toggle</Text> </TouchableOpacity> </View> </View> ); } %%placeholder-start%%const styles = StyleSheet.create({ ... }); %%placeholder-end%%const styles = StyleSheet.create({ buttonContainer: { flexDirection: 'row', alignItems: 'stretch', marginTop: 15, }, button: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: '#eee', padding: 10, }, sensor: { marginTop: 45, paddingHorizontal: 10, }, });
import { Barometer } from 'expo-sensors';
You should always check the sensor availability before attempting to use it.
OS | Availability |
---|---|
iOS | iOS 8+ |
Android | Android 2.3+ (API Level 9+) |
Web | N/A |
boolean
denoting the availability of the sensor.const subscription = Barometer.addListener(({ pressure, relativeAltitude }) => { console.log({ pressure, relativeAltitude }); });
pressure: number
(hPa
). On iOS the relativeAltitude: number
(meters
) value will also be available.remove()
on when you would like to unsubscribe the listener.type BarometerMeasurement = { pressure: number; /* iOS Only */ relativeAltitude?: number; };
Name | Type | Format | iOS | Android | Web |
---|---|---|---|---|---|
pressure | number | hPa | ✅ | ✅ | ❌ |
relativeAltitude | number | undefined | meters | ✅ | ❌ | ❌ |
OS | Units | Provider | Description |
---|---|---|---|
iOS | hPa | CMAltimeter | Altitude events reflect the change in the current altitude, not the absolute altitude. |
Android | hPa | Sensor.TYPE_PRESSURE | Monitoring air pressure changes. |
Web | N/A | N/A | This sensor is not available on the web and cannot be accessed. An UnavailabilityError will be thrown if you attempt to get data. |