A developer friendly approach for sensors in React Native
react-native-sensors
A developer friendly approach for sensors in React Native.
Supported React Native Versions
React Native Version | react-native-sensors Version |
---|---|
<= 39 | < 1.0 |
>= 40 | >= 1.0 |
Cool Projects using react-native-sensors
- react-native-live-translator
- imagination-react-native
- react-native-game-engine-handbook
- react-native-iridescent
- FlyThru
Do you want your project listed here? Just send a PR.
Getting started
$ npm install react-native-sensors --save
Automatic installation
$ react-native link react-native-sensors
Option: With CocoaPods (iOS only)
Add the following to your Podfile and run $ pod install
:
pod 'RNSensors', :path => '../node_modules/react-native-sensors'
Manual installation
iOS
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-sensors
and addRNSensors.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNSensors.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Run your project (
Cmd+R
)<
Android
- Open up
android/app/src/main/java/[...]/MainApplication.java
- Add
import com.sensors.RNSensorsPackage;
to the imports at the top of the file - Add
new RNSensorsPackage()
to the list returned by thegetPackages()
method
- Append the following lines to
android/settings.gradle
:include ':react-native-sensors' project(':react-native-sensors').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-sensors/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:compile project(':react-native-sensors')
Usage
Sensor API
import { Accelerometer, Gyroscope } from "react-native-sensors";
let accelerationObservable = null;
new Accelerometer({
updateInterval: 400 // defaults to 100ms
})
.then(observable => {
accelerationObservable = observable;
// Normal RxJS functions
accelerationObservable
.map(({ x, y, z }) => x + y + z)
.filter(speed => speed > 20)
.subscribe(speed => console.log(`You moved your phone with ${speed}`));
})
.catch(error => {
console.log("The sensor is not available");
});
setTimeout(() => {
accelerationObservable.stop();
}, 1000);
Decorator usage
import React, { Component } from "react";
import { Text, View } from "react-native";
import { decorator as sensors } from "react-native-sensors";
class MyComponent {
// no lifecycle needed
render() {
const { sensorsFound, Accelerometer, Gyroscope } = this.props;
if (!Accelerometer || !Gyroscope) {
// One of the sensors is still initializing
return null;
}
return (
<View style={styles.container}>
<Text style={styles.welcome}>
{(sensorsFound["Accelerometer"] &&
`Acceleration has value: ${Accelerometer}`) ||
"Acceleration is not available"}
{(sensorsFound["Gyroscope"] && `Gyro has value: ${Gyroscope}`) ||
"Gyro is not available"}
</Text>
</View>
);
}
}
export default sensors({
Accelerometer: {
updateInterval: 300 // optional
},
Gyroscope: true
})(MyComponent);