为什么 navigator.geolocation.getcurrentposition 不适用于 React Native 和 Expo

Why navigator.geolocation.getcurrentposition is not available with react native and expo

我正在尝试从设备获取一些位置信息,我在 android 移动设备上使用 React-native、Expo 和 ExpoGo,我没有使用模拟器,应用程序在 Android,但地理定位不起作用,每次都会发送此错误消息: window.navigator.geolocation.getCurrentPosition is not available. Import and execute installWebGeolocationPolyfill() from expo-location to add it, or use the expo-location APIs instead.

请帮我找到解决这个问题的方法。

这是使用的App代码:

import { Text, View} from "react-native";
import styles from "./styles";

const API_KEY = "";
const URL = `https://maps.google.com/maps/api/geocode/json?key=${API_KEY}&latlng=`;

export default function WhereAmI() {
  const [address, setAddress] = useState("loading...");
  const [longitude, setLongitude] = useState();
  const [latitude, setLatitude] = useState();

  useEffect(() => {
    function setPosition({ coords: { latitude, longitude } }) {
      setLongitude(longitude);
      setLatitude(latitude);
      fetch(`${URL}${latitude},${longitude}`)
        .then(
          (resp) => resp.json(),
          (e) => console.error(e)
        )
        .then(({ results }) => {
          setAddress(results[0].formatted_address);
        });
    }

    navigator.geolocation.getCurrentPosition(setPosition);

    let watcher = navigator.geolocation.watchPosition(
      setPosition,
      (err) => console.error(err),
      { enableHighAccuracy: true }
    );

    return () => {
      navigator.geolocation.clearWatch(watcher);
    };
  });

  return (
    <View style={styles.container}>
      <Text style={styles.label}>Address: {address}</Text>
      <Text style={styles.label}>Latitude: {latitude}</Text>
      <Text style={styles.label}>Longitude: {longitude}</Text>
    </View>
  );
}

我解决了这个问题,这对我有用。

  1. iOS 和 Android 上的地理位置:
  • 我通过 运行 expo install expo-location 安装了 expo-location 包。
  • 我将 App.js 中的世博会位置导入为位置:import * as Location from 'expo-location'
  • 我使用了 #installWebGeolocationPolyfill 函数,该函数填充 #navigator.geolocation 以与核心 React Native 互操作 和 Web API 在使用 #navigator.geolocation.getCurrentPosition 之类的方法之前进行地理定位 这个:
       # ... some code

      Location.installWebGeolocationPolyfill()
      navigator.geolocation.getCurrentPosition(setPosition);

      # ... some code

2.The 错误 'formatted_address' 未定义: 那是因为没有 API_KEY,你应该从 Google 得到一个 API 键,相反,我只是手动将它添加到 #setPosition 函数中,如下所示:

 #...some code

.then(
          ({ results }) => {
            results[0]={formatted_address:"here"}
            setAddress(results[0].formatted_address)
          },

 #...some code