plugin for react native that adds an listener for the battery status of a device
Clone or download
oojr Merge pull request #13 from alexdunae/ios-battery-state-full
Set isPlugged for UIDeviceBatteryStateFull
Latest commit 3cbc087 Aug 31, 2018

README.md

react-native-battery

A cross-platform React Native module that returns the battery level/status of a device. Supports iOS and Android.

Package Installation

npm install react-native-battery --save

iOS automatic setup

  • react-native link

Android setup

  • react-native link may work, but it sometimes munges files. If automatic installation fails, use the following manual steps.
  • Add to MainApplication.java:
import com.rctbattery.BatteryManagerPackage;
// ...

@Override
protected List<ReactPackage> getPackages() {
  return Arrays.<ReactPackage>asList(
      new MainReactPackage(),
        new BatteryManagerPackage(),
        // ...
  );
}
  • Add to android/settings.gradle:
include ':react-native-battery'
project(':react-native-battery').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-battery/android')
//...
  • Add to android/app/build.gradle:
dependencies {
  compile project(':react-native-battery')
  //...
}

Example

'use strict';
var React = require('react-native');
var BatteryManager = require('NativeModules').BatteryManager;
var {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  DeviceEventEmitter,
} = React;

var RCTBattery = React.createClass({

  getInitialState: function() {
    return {batteryLevel: null, charging:false};
  },

  onBatteryStatus: function(info){
    this.setState({batteryLevel: info.level});
    this.setState({charging: info.isPlugged});
  },

  componentDidMount: function(){
    BatteryManager.updateBatteryLevel(function(info){
      this._subscription = DeviceEventEmitter.addListener('BatteryStatus', this.onBatteryStatus);
      this.setState({batteryLevel: info.level});
      this.setState({charging: info.isPlugged});
    }.bind(this));
  },

  componentWillUnmount: function(){
    this._subscription.remove();
  },

  render: function() {
    var chargingText;
    if(this.state.charging){
      chargingText =<Text style={styles.instructions}>Charging </Text>;
    } else {
      chargingText =<Text style={styles.instructions}>Not Charging </Text>;
    }
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Battery Level {this.state.batteryLevel}
        </Text>
        {chargingText}
      </View>
    );
  }
});

var styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

AppRegistry.registerComponent('RCTBattery', () => RCTBattery);