📜  @ionic-native geolocation (1)

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

@ionic-native/geolocation

@ionic-native/geolocation 是一个 Cordova 插件的包装器,可以在 Angular 和 Ionic 应用程序中使用。它提供了访问设备地理位置的 API,允许您获取用户设备的经纬度信息。

功能特性
  • 获取设备的经纬度信息
  • 以回调方式或 Promise 方式获取位置信息
  • 监听位置改变事件
安装

要安装 @ionic-native/geolocation 包,请使用以下命令:

npm install @ionic-native/geolocation
使用方法

@ionic-native/geolocation 可以与两种不同的方式一起使用:回调和 Promise。下面是使用回调函数的示例:

import { Geolocation } from '@ionic-native/geolocation/ngx';

constructor(private geolocation: Geolocation) { }

this.geolocation.getCurrentPosition().then((resp) => {
  // resp.coords.latitude
  // resp.coords.longitude
}).catch((error) => {
  console.log('Error getting location', error);
});

使用 Promise 的示例:

import { Geolocation } from '@ionic-native/geolocation/ngx';

constructor(private geolocation: Geolocation) { }

let options = {
  enableHighAccuracy: true
};

this.geolocation.getCurrentPosition(options).then((resp) => {
  // resp.coords.latitude
  // resp.coords.longitude
}).catch((error) => {
  console.log('Error getting location', error);
});

您可以从 options 对象中设置选项,使其适应您的需要。例如,您可以启用或禁用高精度模式(默认值为 false)。

监听位置改变事件

如果您想在用户移动时获取即时位置信息,则可以使用 watchPosition 方法:

import { Geolocation } from '@ionic-native/geolocation/ngx';

constructor(private geolocation: Geolocation) { }

let watch = this.geolocation.watchPosition();
watch.subscribe((data) => {
  // data.coords.latitude
  // data.coords.longitude
});

watchPosition 方法返回一个 Observable,每当位置发生更改时,就会发出一个新的位置对象。

需要的权限

在使用 @ionic-native/geolocation 插件之前,您需要在应用程序的 AndroidManifest.xml 或 Info.plist 文件中添加以下权限:

Android
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
iOS
<key>NSLocationWhenInUseUsageDescription</key>
<string>Your message goes here</string>

您还需要通过添加此插件的代码行(只需添加一次)来向用户请求位置访问权限:

this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.ACCESS_COARSE_LOCATION).then((result) => {
  if (!result.hasPermission) {
      this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.ACCESS_COARSE_LOCATION);
  }
});
参考文献