Native modules for sensors not available. Did react-native link run successfully?

谁说我不能喝 提交于 2019-12-24 08:01:25

问题


I followed the first steps of the React Native tutorial here:

https://facebook.github.io/react-native/docs/getting-started.html

Then I want to read information from the device sensors.

For that I also followed this tutorial:

https://medium.com/react-native-training/using-sensors-in-react-native-b194d0ad9167

and ended up with this code (just copy/pasted from there):

// Reference:
// https://medium.com/react-native-training/using-sensors-in-react-native-b194d0ad9167
// https://react-native-sensors.github.io

import React, { Component } from 'react';
import {
  StyleSheet,
  Text,
  View
} from 'react-native';
import { Accelerometer } from "react-native-sensors";

const Value = ({name, value}) => (
  <View style={styles.valueContainer}>
    <Text style={styles.valueName}>{name}:</Text>
    <Text style={styles.valueValue}>{new String(value).substr(0, 8)}</Text>
  </View>
)

export default class App extends Component {
  constructor(props) {
    super(props);

    new Accelerometer({
      updateInterval: 400 // defaults to 100ms
    })
      .then(observable => {
        observable.subscribe(({x,y,z}) => this.setState({x,y,z}));
      })
      .catch(error => {
        console.log("The sensor is not available");
      });

    this.state = {x: 0, y: 0, z: 0};
  }

  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.headline}>
          Accelerometer values
        </Text>
        <Value name="x" value={this.state.x} />
        <Value name="y" value={this.state.y} />
        <Value name="z" value={this.state.z} />
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  headline: {
    fontSize: 30,
    textAlign: 'center',
    margin: 10,
  },
  valueContainer: {
    flexDirection: 'row',
    flexWrap: 'wrap',
  },
  valueValue: {
    width: 200,
    fontSize: 20
  },
  valueName: {
    width: 50,
    fontSize: 20,
    fontWeight: 'bold'
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

Here is the full repository you can download and try right away:

$ git clone https://github.com/napolev/react-native-app
$ cd react-native-app
$ npm i
$ expo start

My problem is that after I do: $ expo start I get the following error:

Native modules for sensors not available. Did react-native link run successfully?

as you can see on the following image:

Any idea about how can I make this work?

Thanks!


回答1:


It's probably due to the fact that you are using Expo and that react-native-sensors requires the full version of React Native.

To use react-native-sensors you will probably have to eject your app and then install the dependency. If you eject your app it will require you to have Xcode (for iOS) and Android Studio (for Android) installed on your development machine.

For more details on the differences between Expo and React-Native check out this SO answer: What is the difference between Expo and React Native?

However, Expo does have access to some sensor info, you can read more about using the accelerometer here https://docs.expo.io/versions/latest/sdk/accelerometer

Expo also has access to the gyroscope, the magnetometer and a pedometer, though no barometer that I can see in the docs



来源:https://stackoverflow.com/questions/53905714/native-modules-for-sensors-not-available-did-react-native-link-run-successfully

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!