useBattery

React hook to track device battery level, charging status, and charging time with event callbacks.

pnpm add react-callback-hooks

Demo

Detecting battery status...

Usage

import { useBattery } from 'react-callback-hooks'

export default function BatteryIndicator() {
  const battery = useBattery({
    onLevelChange: (level, { charging }) => {
      console.log(`Battery level changed to ${level}%`)
    },
    onChargingChange: (charging, { level }) => {
      console.log(charging ? 'Charger connected' : 'Charger disconnected')
    },
    onSupported: (supported) => {
      if (!supported)
        console.warn('Battery API is not supported in this browser')
    }
  })

  if (battery.loading) return <p>Loading battery status...</p>
  if (!battery.supported) return <p>Battery API not supported</p>

  return (
    <div>
      <p>Level: {battery.level}%</p>
      <p>Status: {battery.charging ? 'Charging' : 'On Battery'}</p>
    </div>
  )
}

Parameters

PropertyTypeDefaultDescription
onLevelChange(level: number, battery: { charging: boolean }) => voidCalled when the battery level changes. level is 0100.
onChargingChange(charging: boolean, battery: { level: number }) => voidCalled when device starts or stops charging.
onChargingTimeChange(chargingTime: number, battery: Pick<...>) => voidCalled when estimated time to full charge changes (in seconds).
onDischargingTimeChange(dischargingTime: number, battery: Pick<...>) => voidCalled when estimated time until empty changes (in seconds).
onSupported(supported: boolean) => voidCalled once upon initialization indicating browser support.

Return Values

Returns a BatteryState object:

PropertyTypeDescription
loadingbooleantrue while the Battery API is initializing asynchronously.
supportedbooleantrue if navigator.getBattery is available and supported by the browser.
levelnumber | undefinedCurrent battery percentage from 0 to 100.
chargingboolean | undefinedtrue if the device is currently plugged into power.
chargingTimenumber | undefinedRemaining time in seconds until fully charged (Infinity if discharging).
dischargingTimenumber | undefinedRemaining time in seconds until battery is empty (Infinity if charging).

The Battery Status API is supported in Chromium-based browsers (Chrome, Edge, Opera) and may be unavailable or restricted in Safari and Firefox for privacy reasons.