Skip to main content

Overview

Checks if the device is in Power Save (Battery Saver) mode. This is a system-wide setting that affects ALL apps, regardless of battery optimization exemptions.
function isPowerSaveMode(): Promise<boolean>

Returns

isPowerSave
boolean
Promise resolving to true if power save mode is enabled, false otherwise.

Platform Behavior

PlatformBehavior
AndroidChecks PowerManager.isPowerSaveMode(). Available on API 21+ (Android 5.0+). Returns false on older versions.
iOSAlways returns false.

What is Power Save Mode?

Power Save (Battery Saver) mode is a user-activated setting to extend battery life. When active, the system may: System Restrictions:
  • 🔴 Throttle CPU performance
  • 🔴 Reduce screen brightness
  • 🔴 Limit or disable background data
  • 🔴 Reduce location update frequency
  • 🔴 Defer background jobs
  • 🔴 Disable vibration
  • 🔴 Limit sync adapters
  • 🔴 Disable certain visual effects
Key Difference from Battery Optimization:
FeaturePower Save ModeBattery Optimization
ScopeSystem-wide, all appsPer-app
ControlUser toggles globallyUser exempts specific apps
Can be bypassed❌ Affects all apps✅ Apps can be exempted
When activeOnly when user enablesAlways (unless exempt)
Even if your app is exempt from battery optimizations using isIgnoringBatteryOptimizations(), it will STILL be affected by Power Save mode when the user enables it.

Use Cases

When to check:
  • Before starting intensive operations
  • To inform users why features are limited
  • To adjust app behavior (reduce sync frequency, etc.)
  • For debugging performance issues

Example Usage

Basic Check

import { isPowerSaveMode } from 'react-native-background-guardian';

const isPowerSave = await isPowerSaveMode();

if (isPowerSave) {
  console.log('Device is in Battery Saver mode');
} else {
  console.log('Device is in normal mode');
}

Alert User About Limitations

import { Alert } from 'react-native';
import { isPowerSaveMode, openPowerSaveModeSettings } from 'react-native-background-guardian';

async function checkPowerSaveMode() {
  const isPowerSave = await isPowerSaveMode();
  
  if (isPowerSave) {
    Alert.alert(
      'Battery Saver Active',
      'Background features may be limited while Battery Saver is on. Disable Battery Saver for the best experience.',
      [
        { text: 'OK', style: 'cancel' },
        { 
          text: 'Open Settings', 
          onPress: () => openPowerSaveModeSettings() 
        }
      ]
    );
  }
}

Adaptive Sync Frequency

import { isPowerSaveMode } from 'react-native-background-guardian';

class DataSyncManager {
  async getSyncInterval() {
    const isPowerSave = await isPowerSaveMode();
    
    if (isPowerSave) {
      // Less frequent syncing in power save mode
      return 30 * 60 * 1000; // 30 minutes
    } else {
      // Normal sync frequency
      return 5 * 60 * 1000; // 5 minutes
    }
  }
  
  async scheduleSync() {
    const interval = await this.getSyncInterval();
    setInterval(() => this.performSync(), interval);
  }
}

Status Banner

import { useState, useEffect } from 'react';
import { isPowerSaveMode } from 'react-native-background-guardian';

function PowerSaveBanner() {
  const [showBanner, setShowBanner] = useState(false);

  useEffect(() => {
    const checkPowerSave = async () => {
      const isPowerSave = await isPowerSaveMode();
      setShowBanner(isPowerSave);
    };

    checkPowerSave();
    
    // Re-check when app comes to foreground
    const subscription = AppState.addEventListener('change', (state) => {
      if (state === 'active') {
        checkPowerSave();
      }
    });

    return () => subscription.remove();
  }, []);

  if (!showBanner) return null;

  return (
    <View style={{ backgroundColor: 'orange', padding: 10 }}>
      <Text>⚠️ Battery Saver is on - some features may be limited</Text>
    </View>
  );
}

Comprehensive Status Check

import { 
  isPowerSaveMode, 
  isDeviceIdleMode, 
  isIgnoringBatteryOptimizations 
} from 'react-native-background-guardian';

async function getDevicePowerStatus() {
  const [powerSave, dozeMode, batteryExempt] = await Promise.all([
    isPowerSaveMode(),
    isDeviceIdleMode(),
    isIgnoringBatteryOptimizations()
  ]);

  return {
    powerSave,
    dozeMode,
    batteryExempt,
    // Determine overall background capability
    canRunInBackground: batteryExempt && !powerSave && !dozeMode
  };
}

// Usage
const status = await getDevicePowerStatus();
if (!status.canRunInBackground) {
  console.log('Background execution may be limited');
}

Settings Screen

import { useState, useEffect } from 'react';
import { isPowerSaveMode, openPowerSaveModeSettings } from 'react-native-background-guardian';

function PowerSettingsScreen() {
  const [isPowerSave, setIsPowerSave] = useState(false);

  const checkStatus = async () => {
    const status = await isPowerSaveMode();
    setIsPowerSave(status);
  };

  useEffect(() => {
    checkStatus();
    
    const interval = setInterval(checkStatus, 10000); // Check every 10s
    return () => clearInterval(interval);
  }, []);

  return (
    <View>
      <Text>Battery Saver Mode</Text>
      <Text>Status: {isPowerSave ? '🟡 On' : '🟢 Off'}</Text>
      
      {isPowerSave && (
        <View>
          <Text style={{ color: 'orange' }}>
            Battery Saver limits background activity and performance
          </Text>
          <Button 
            title="Open Battery Saver Settings" 
            onPress={openPowerSaveModeSettings}
          />
        </View>
      )}
    </View>
  );
}

Disable Auto-Sync in Power Save

import { isPowerSaveMode } from 'react-native-background-guardian';

class AutoSyncService {
  private syncInterval: NodeJS.Timeout | null = null;

  async start() {
    const isPowerSave = await isPowerSaveMode();
    
    if (isPowerSave) {
      console.log('Auto-sync disabled due to Battery Saver');
      this.stop();
      return;
    }
    
    this.syncInterval = setInterval(() => {
      this.performSync();
    }, 300000); // 5 minutes
  }

  stop() {
    if (this.syncInterval) {
      clearInterval(this.syncInterval);
      this.syncInterval = null;
    }
  }
}

Android API Levels

Power Save mode was introduced in Android 5.0 (API 21):
  • API < 21: Always returns false
  • API ≥ 21: Returns actual system state

Battery Optimization vs Power Save Mode

Understanding the difference:
import { 
  isPowerSaveMode, 
  isIgnoringBatteryOptimizations 
} from 'react-native-background-guardian';

const powerSave = await isPowerSaveMode();
const batteryExempt = await isIgnoringBatteryOptimizations();

if (powerSave && batteryExempt) {
  console.log('App is exempt BUT Battery Saver overrides it');
  console.log('Background features will still be limited');
}

if (!powerSave && !batteryExempt) {
  console.log('Battery Saver is off BUT app is still optimized');
  console.log('App may be restricted by Doze mode');
}