你能用 React Native 跟踪背景地理定位吗?

新手上路,请多包涵

问题

即使应用程序不再位于前台,我也希望能够跟踪用户位置(例如,用户已切换到另一个应用程序或切换到主屏幕并锁定了他们的手机)。

用例是用户跟踪跑步。他们可以打开应用程序并在开始运行时按“开始”,然后切换或最小化应用程序(按主页按钮)并锁定屏幕。在跑步结束时,他们可以将应用程序调到前台并按下“停止”,然后应用程序会告诉他们跑步的距离。

问题

是否可以使用纯 React Native 在 iOS 和 Android 上跟踪背景地理定位?

有关地理定位的 React Native 文档 ( https://facebook.github.io/react-native/docs/geolocation ) 不是很清楚或详细。上面记录的链接避开了 iOS 上的背景地理定位(没有完全清楚),但没有提到 Android。

我最好使用 Expo 吗?

原文由 Grant 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 650
2 个回答

更新 2019 世博会 33.0.0:

Expo 首先弃用了他们的 SDK 32.0.0 以满足应用商店指南,但随后 在 SDK 33.0.0 中重新打开了它

从那以后,他们让实现后台定位变得超级容易。使用我用来使后台地理定位工作的代码片段。

 import React from 'react';
import { Text, TouchableOpacity } from 'react-native';
import * as TaskManager from 'expo-task-manager';
import * as Location from 'expo-location';

const LOCATION_TASK_NAME = 'background-location-task';

export default class Component extends React.Component {
  onPress = async () => {
    await Location.startLocationUpdatesAsync(LOCATION_TASK_NAME, {
      accuracy: Location.Accuracy.Balanced,
      timeInterval: 5000,
    });
  };

  render() {
    return (
      <TouchableOpacity onPress={this.onPress} style={{marginTop: 100}}>
        <Text>Enable background location</Text>
      </TouchableOpacity>
    );
  }
}

TaskManager.defineTask(LOCATION_TASK_NAME, ({ data, error }) => {
  if (error) {
    alert(error)
    // Error occurred - check `error.message` for more details.
    return;
  }
  if (data) {
    const { locations } = data;
    alert(JSON.stringify(locations); //will show you the location object
    //lat is locations[0].coords.latitude & long is locations[0].coords.longitude
    // do something with the locations captured in the background, possibly post to your server with axios or fetch API
  }
});

该代码就像一个魅力。需要注意的一件事是 您不能在 Expo App 中使用地理定位。但是, 您可以在独立构建中使用它。因此,如果您想使用后台地理定位,您必须使用此代码,然后执行 expo build:ios 并上传到应用商店,以便能够获取用户后台位置。

此外,请注意,您 必须 包括

"UIBackgroundModes":[
          "location",
          "fetch"
        ]

info.plist app.json --- 部分。

原文由 Erik Toor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题