1import * as Battery from 'expo-battery'; 2import * as React from 'react'; 3import { ScrollView } from 'react-native'; 4 5import MonoText from '../components/MonoText'; 6 7export default function BatteryScreen() { 8 const [isAvailable, setIsAvailable] = React.useState<boolean | null>(null); 9 const [batteryLevel, setBatteryLevel] = React.useState(-1); 10 const [batteryState, setBatteryState] = React.useState(Battery.BatteryState.UNKNOWN); 11 const [lowPowerMode, setLowPowerMode] = React.useState(false); 12 const [batteryOptimizationState, setBatteryOptimizationState] = React.useState(false); 13 14 React.useEffect(() => { 15 (async () => { 16 const [isAvailable, batteryLevel, batteryState, lowPowerMode, batteryOptimizationState] = 17 await Promise.all([ 18 Battery.isAvailableAsync(), 19 Battery.getBatteryLevelAsync(), 20 Battery.getBatteryStateAsync(), 21 Battery.isLowPowerModeEnabledAsync(), 22 Battery.isBatteryOptimizationEnabledAsync(), 23 ]); 24 25 setIsAvailable(isAvailable || false); 26 setBatteryLevel(batteryLevel); 27 setBatteryState(batteryState); 28 setLowPowerMode(lowPowerMode); 29 setBatteryOptimizationState(batteryOptimizationState); 30 })(); 31 const batteryLevelListener = Battery.addBatteryLevelListener(({ batteryLevel }) => 32 setBatteryLevel(batteryLevel) 33 ); 34 const batteryStateListener = Battery.addBatteryStateListener(({ batteryState }) => 35 setBatteryState(batteryState) 36 ); 37 const lowPowerModeListener = Battery.addLowPowerModeListener(({ lowPowerMode }) => 38 setLowPowerMode(lowPowerMode) 39 ); 40 return () => { 41 batteryLevelListener && batteryLevelListener.remove(); 42 batteryStateListener && batteryStateListener.remove(); 43 lowPowerModeListener && lowPowerModeListener.remove(); 44 }; 45 }, []); 46 47 return ( 48 <ScrollView style={{ padding: 10 }}> 49 <MonoText> 50 {isAvailable 51 ? JSON.stringify( 52 { 53 batteryLevel, 54 batteryState: getBatteryStateString(batteryState), 55 lowPowerMode, 56 batteryOptimizationState, 57 }, 58 null, 59 2 60 ) 61 : 'Battery API is not supported on this device'} 62 </MonoText> 63 </ScrollView> 64 ); 65} 66 67function getBatteryStateString(batteryState: Battery.BatteryState): string { 68 switch (batteryState) { 69 case Battery.BatteryState.UNPLUGGED: 70 return 'UNPLUGGED'; 71 case Battery.BatteryState.CHARGING: 72 return 'CHARGING'; 73 case Battery.BatteryState.FULL: 74 return 'FULL'; 75 case Battery.BatteryState.UNKNOWN: 76 default: 77 return 'UNKNOWN'; 78 } 79} 80