React Native Geolocation Watchposition不会实时更新

时间:2018-02-12 17:47:35

标签: android react-native geolocation react-redux

我正在使用navigator.geolocation.getCurrentPosition()navigator.geolocation.watchPosition()获取手机的当前位置,然后在移动时实时保持该位置以及速度。在进行这些调用之后,我使用redux来设置当前位置和速度的状态。

当我在genymotion模拟器中测试它时,它在我更改gps坐标时按计划工作。状态随当前位置更新,并且信息将在屏幕上呈现。

然而,当我构建应用程序以在我的手机上进行测试时,它无法按预期工作。当我第一次打开应用程序时,该位置显示正确。当汽车开始行驶时,位置和速度只会经常更新。

在屏幕上,我有当前位置和当前速度,这是从我用redux填充的状态中提取数据。这些数字可能每5-10秒更新一次。

我在应用程序上打开了一张地图,显示/更新了我当前的位置(将其坐标从与我上面指出的“当前位置”和“当前速度”相同的状态拉出)。地图上的当前位置显示我几乎实时移动,每半秒左右更新一次。

对于所有文字感到抱歉,但最大的问题是:如果我的地图和屏幕正在从同一状态中提取数据,为什么地图会实时更新,而不是其他地方?我期望的目的是看到当前位置和速度数几乎每秒都在变化。

以下是我的导航地理定位代码供参考:

navigator.geolocation.getCurrentPosition()

navigator.geolocation.getCurrentPosition((position) => {
  const lat = parseFloat(position.coords.latitude);
  const long = parseFloat(position.coords.longitude);

  const initialRegion = {
    latitude: lat,
    longitude: long,
    latitudeDelta: LATITUDE_DELTA,
    longitudeDelta: LONGITUDE_DELTA
  };

  this.props.setCurrentPosition(initialRegion);
  },
  error => console.log('getCurrentPosition error', JSON.stringify(error)),
  { enableHighAccuracy: true, maximumAge: 0 }
);

navigator.geolocation.watchPosition()

this.watchId = navigator.geolocation.watchPosition(position => {
    console.log('watchposition: ', position);

    const lat = parseFloat(position.coords.latitude);
    const long = parseFloat(position.coords.longitude);

    const lastRegion = {
      latitude: lat,
      longitude: long,
      longitudeDelta: LONGITUDE_DELTA,
      latitudeDelta: LATITUDE_DELTA
    };

    // convert speed from m/s to mph
    const speed = position.coords.speed * 2.23694;

    this.props.setCurrentPosition(lastRegion);
    this.props.setCurrentSpeed(speed);
  },
  error => console.log('watchposition error', error),
  { enableHighAccuracy: true, maximumAge: 0 }
);

1 个答案:

答案 0 :(得分:1)

我无法让watchPosition()始终如一地工作,但最终设置了一个计时器,每隔几秒运行一次getCurrentPosition(),这对我的应用程序来说也是如此。