📌  相关文章
📜  window.navigator.geolocation.getCurrentPosition 不可用.从 expo-location 导入并执行 installWebGeolocationPolyfill() 以添加 i - Javascript (1)

📅  最后修改于: 2023-12-03 15:05:56.883000             🧑  作者: Mango

Expo-Location: 在 React Native 应用中添加地理位置功能

Expo-Location 是一个 React Native 应用中添加地理位置功能的库,提供了简单易用的 API。但是,在某些情况下,当该授权未被用户授予或硬件不支持时,window.navigator.geolocation.getCurrentPosition 方法会无法使用。这时,我们需要使用 installWebGeolocationPolyfill() 方法来添加适当的 polyfill。

安装 Expo-Location

在开始使用 Expo-Location 之前,我们需要先根据我们的项目安装对应的库。可以使用 npm 或 yarn 来安装。

npm install expo-location
或
yarn add expo-location
添加 Web Geolocation Polyfill

在某些情况下,window.navigator.geolocation.getCurrentPosition 方法会无法使用,例如在用户未授权或设备不支持时。在这种情况下,我们需要添加一个适当的 polyfill。

import * as Location from 'expo-location';

Location.installWebGeolocationPolyfill();

installWebGeolocationPolyfill() 方法可以在 Web 应用程序中模拟 window.navigator.geolocation.getCurrentPosition 的行为,并返回具有模拟位置信息的可用位置信息。

获取设备位置信息

在安装了适当的 polyfill 后,我们可以使用 getCurrentPositionAsync() 方法来获取设备的位置信息。

import * as Location from 'expo-location';

const getLocation = async () => {
  const { status } = await Location.requestPermissionsAsync();
  if (status !== 'granted') {
    console.log('Permission to access location was denied');
    return;
  }

  const location = await Location.getCurrentPositionAsync({});
  console.log(location);
}

getLocation();

getCurrentPositionAsync() 方法默认返回最近获取到的设备位置信息。我们可以传递空对象作为参数来使用默认选项,或者传递选项以获取更精细的位置信息。

结论

通过安装 expo-location 库并适当的添加 polyfill,我们可以在 React Native 应用程序中方便地获取设备的位置信息。在某些情况下,我们可以使用 installWebGeolocationPolyfill() 方法来修复 window.navigator.geolocation.getCurrentPosition 方法的问题。