如何让Expo计步器始终在后台运行?

时间:2019-08-25 02:09:46

标签: react-native expo pedometer

我正在使用Expo计步器:(https://docs.expo.io/versions/latest/sdk/pedometer/), 并有一个有效的计步器,可以在我的应用的一页上工作。

在我打开屏幕并握住手机并使用状态存储currentSteps的同时,它会按预期行走。但是,当我关闭手机屏幕/锁定手机时,走路时步伐不会增加-仅当屏幕打开时它才起作用。

我一直在阅读有关世博任务管理器的信息:https://docs.expo.io/versions/latest/sdk/task-manager/ 但是我真的不知道该怎么做...

export default class Steps extends Component {

  constructor(props) {
    super(props)
    this.state = {
      goalSteps: 10000,
      isPedometerAvailable: "checking",
      pastStepCount: 0,
      currentStepCount: 0
    }
  }

  componentDidMount() {
    this._subscribe();
  }

  componentWillUnmount() {
    this._unsubscribe();
  }

  _subscribe = () => {
    this._subscription = Pedometer.watchStepCount(result => {
      this.setState({
        currentStepCount: result.steps
      }, () => {
        console.log(this.state.currentStepCount)
      });
    });

    Pedometer.isAvailableAsync().then(
      result => {
        this.setState({
          isPedometerAvailable: String(result)
        });
      },
      error => {
        this.setState({
          isPedometerAvailable: "Could not get isPedometerAvailable: " + error
        });
      }
    );

    const end = new Date();
    const start = new Date();
    start.setDate(end.getDate() - 1);
    Pedometer.getStepCountAsync(start, end).then(
      result => {
        this.setState({ pastStepCount: result.steps });

      },
      error => {
        this.setState({
          pastStepCount: "Could not get stepCount: " + error
        });
      }
    );
  };

  _unsubscribe = () => {
    this._subscription && this._subscription.remove();
    this._subscription = null;
  };

//...
render() {
return(
<View>
<Text>{this.state.currentStepCount}</Text>
</View>
)

我希望能够计算步数并在用户行走时将其存储,因此当他们打开应用程序以检查其步数时,会向他们显示他们一天中已完成的步数。并非如此;它只是将其设置回0,因为这是在“ currentStepCount:0”中设置的初始状态。

我希望在实现此后台功能方面有所帮助。

0 个答案:

没有答案