expo-battery
Version: 55.0.6
Provides battery information for the physical device, as well as corresponding event listeners.
Installation
npx expo install expo-battery
Usage
import * as Battery from 'expo-battery';
import { useEffect, useState } from 'react';
function App() {
const [batteryLevel, setBatteryLevel] = useState<number | null>(null);
useEffect(() => {
Battery.getBatteryLevelAsync().then(setBatteryLevel);
const subscription = Battery.addBatteryLevelListener(({ batteryLevel }) => {
setBatteryLevel(batteryLevel);
});
return () => subscription.remove();
}, []);
return <Text>Battery: {(batteryLevel * 100).toFixed(0)}%</Text>;
}
API Reference
Methods
Battery.getBatteryLevelAsync()
Gets current battery level (0-1)const level = await Battery.getBatteryLevelAsync();
console.log(`${(level * 100).toFixed(0)}%`);
Battery.getBatteryStateAsync()
() => Promise<BatteryState>
Gets battery charging stateReturns:
Battery.BatteryState.UNKNOWN
Battery.BatteryState.UNPLUGGED
Battery.BatteryState.CHARGING
Battery.BatteryState.FULL
Battery.isLowPowerModeEnabledAsync()
Checks if low power mode is enabled
Battery.getPowerStateAsync()
() => Promise<PowerState>
Gets complete power stateconst powerState = await Battery.getPowerStateAsync();
console.log(powerState);
// {
// batteryLevel: 0.75,
// batteryState: Battery.BatteryState.CHARGING,
// lowPowerMode: false
// }
Event Listeners
Battery.addBatteryLevelListener(listener)
(listener: (event: BatteryLevelEvent) => void) => EventSubscription
Listens for battery level changesconst subscription = Battery.addBatteryLevelListener(({ batteryLevel }) => {
console.log('Battery:', batteryLevel);
});
// Clean up
subscription.remove();
Battery.addBatteryStateListener(listener)
(listener: (event: BatteryStateEvent) => void) => EventSubscription
Listens for battery state changes
Battery.addLowPowerModeListener(listener)
(listener: (event: LowPowerModeEvent) => void) => EventSubscription
Listens for low power mode changes
Examples
Battery Indicator
import * as Battery from 'expo-battery';
import { useEffect, useState } from 'react';
import { View, Text, StyleSheet } from 'react-native';
function BatteryIndicator() {
const [batteryLevel, setBatteryLevel] = useState(0);
const [batteryState, setBatteryState] = useState(Battery.BatteryState.UNKNOWN);
useEffect(() => {
async function loadBatteryInfo() {
const level = await Battery.getBatteryLevelAsync();
const state = await Battery.getBatteryStateAsync();
setBatteryLevel(level);
setBatteryState(state);
}
loadBatteryInfo();
const levelSub = Battery.addBatteryLevelListener(({ batteryLevel }) => {
setBatteryLevel(batteryLevel);
});
const stateSub = Battery.addBatteryStateListener(({ batteryState }) => {
setBatteryState(batteryState);
});
return () => {
levelSub.remove();
stateSub.remove();
};
}, []);
const percentage = (batteryLevel * 100).toFixed(0);
const isCharging = batteryState === Battery.BatteryState.CHARGING;
return (
<View style={styles.container}>
<Text style={styles.percentage}>{percentage}%</Text>
<Text>{isCharging ? '⚡ Charging' : '🔋 Unplugged'}</Text>
</View>
);
}
const styles = StyleSheet.create({
container: { padding: 20, alignItems: 'center' },
percentage: { fontSize: 48, fontWeight: 'bold' }
});
Low Battery Warning
import * as Battery from 'expo-battery';
import { useEffect, useState } from 'react';
import { Alert } from 'react-native';
function useBatteryWarning() {
useEffect(() => {
const subscription = Battery.addBatteryLevelListener(({ batteryLevel }) => {
if (batteryLevel < 0.2) {
Alert.alert(
'Low Battery',
'Battery is below 20%. Please charge your device.'
);
}
});
return () => subscription.remove();
}, []);
}
| Platform | Supported |
|---|
| iOS | ✅ |
| Android | ✅ |
| Web | ✅ (Battery Status API) |
Resources