Асинхронный поиск местоположения решен на втором вызове Android реагирует на родную выставку - PullRequest
0 голосов
/ 29 августа 2018

Я делаю приложение с помощью собственной реакции, и у меня есть MapView, который изначально должен быть в центре текущего местоположения. На ios центрирование выполняется автоматически (центр, вызываемый в компоненте, который монтировал), но на Android центрирование происходит только тогда, когда я вызываю метод centerLocation с помощью кнопки после монтирования компонента. Я смог сузить проблему до того факта, что получение текущего местоположения изначально никогда не разрешает первый вызов, но я не уверен, почему это происходит, и почему он работает нормально при втором вызове метода. Разрешения все предоставлены и в порядке. Любая помощь будет оценена :)

Мой текущий вызов метода определения местоположения: (в любом случае, через Location или через навигатор не разрешается первый вызов. Стоит отметить, что на iOS это работает совершенно нормально)

const getCurrentLocation = async () => {
  const position = Location.getCurrentPositionAsync({ enableHighAccuracy: true });
  return position;
  // return new Promise<Position>((resolve, reject) => {
  //   navigator.geolocation.getCurrentPosition(position => resolve(position), e => reject(e));
  // });
};

Положение никогда не разрешается, когда centerLocation вызывается из componentDidMount. Однако, когда я снова вызываю его через кнопку, он работает нормально.

centerLocation = () => {
    return getCurrentLocation().then((position) => {
      console.log(position);
      if (position) {
        this.setState({
          region: {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude,
            latitudeDelta: 0.003,
            longitudeDelta: 0.003,
          },
        });
      }
    });
  }

У меня возникают похожие проблемы и с другими экранами / использованиями с местоположением. Например, у меня есть фид, который пытается извлечь контент из определенного местоположения, но первоначальный вызов местоположения никогда не разрешается, а работает только после того, как я вручную обновлю фид. Только на Android, хотя. Большое спасибо!

...