Как сохранить местоположение обновления, даже если объект не перемещается, используя фоновый сервис expo Location.startLocationUpdatesAsyn c (), - PullRequest
0 голосов
/ 11 апреля 2020

Пожалуйста, укажите следующее: 1. Версия SDK: 37 2. Платформы (Android / iOS / Интернет / все): Android

Я использую версию Expo SDK: 37, с платформой Android, Я хотел бы спросить, есть ли способ информировать приложения о текущем местоположении пользователя, даже если пользователь не перемещается , я пытаюсь записывать местоположение пользователя в каждые 5 минут , он работает с Location.startLocationUpdatesAsyn c (см. Код ниже), но если пользователь не перемещается в течение длительного времени, например, когда он сидит, это не обновленное местоположение, как я записываю положение пользователя, хотя пользователь не перемещается, так как код ниже startLocationUpdatesAsyn c будет запускаться каждые 10 секунд, но если объект не перемещается, он не генерирует новые данные о местоположении (см. const {широта, долгота} = data.locations [0] .coords)

  useEffect(() => {
    async function startWatching() {
      locationService.subscribe(onLocationUpdate)
      try {
        const { granted } = await Location.requestPermissionsAsync();
        if (!granted) {
          throw new Error('Location permission not granted');
        }
        let isRegistered = await TaskManager.isTaskRegisteredAsync('firstTask');
        if (isRegistered) {
          TaskManager.unregisterTaskAsync('firstTask')
        }
        await Location.startLocationUpdatesAsync('firstTask', {
          accuracy: Location.Accuracy.BestForNavigation,
          timeInterval: 10000,
          activityType: Location.ActivityType.AutomotiveNavigation,
          deferredUpdatesInterval: 15000
        });
      } catch (e) {
        setErr(e);
      }
    };
    startWatching()
  }, []);

  TaskManager.defineTask('firstTask', ({ data, error }) => {
    if (error) {
      // Error occurred - check `error.message` for more details.
      return;
    }
    if (data) {
      const { latitude, longitude } = data.locations[0].coords
      locationService.setLocation({latitude, longitude})
      // console.log('locations', locations);
    }
  });

1 Ответ

1 голос
/ 11 апреля 2020

Поскольку вам нужно записывать местоположение пользователя каждые 5 минут, я вижу две опции:

  1. Вместо прослушивания изменений местоположения с помощью Location.startLocationUpdatesAsync, установите интервал, который будет извлекать текущее местоположение каждые 5 минут. минут, например:
  2. Продолжайте прислушиваться к изменениям местоположения, как и вы, но также установите интервал, который будет получать текущее местоположение из вашей службы определения местоположения каждые 5 минут и использовать его. Если местоположение не изменилось за это время, оно просто отправит предыдущее значение.
...