React Native Geolocation Watchposition 不会实时更新

React Native Geolocation Watchposition Won't Real-Time Update

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

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

但是,当我构建应用程序以在我的 phone 上进行测试时,它没有按预期运行。当我第一次打开应用程序时,位置显示正确。但是,当汽车开始移动时,位置和速度只会每隔一段时间更新一次。

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

我在应用程序上打开了一张地图,其中 shows/updates 显示了我的当前位置(从与我在上面指出的 "current position" 和 "current speed" 相同的状态中提取坐标)。地图上的当前位置显示我在移动,几乎是实时的,每半秒左右更新一次。

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

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

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 }
);

我无法让 watchPosition() 始终如一地工作,但最终设置了一个计时器 运行 getCurrentPosition() 每隔几秒,这对我的应用程序同样有效。