@capacitor/geolocation
Geolocation API 提供简单的方法,通过 GPS 获取和跟踪设备的当前位置,如果可用还会包含海拔、朝向和速度信息。
安装
npm install @capacitor/geolocation@latest-5
npx cap sync
iOS
Apple 要求在 Info.plist 中为位置信息指定隐私描述:
NSLocationAlwaysUsageDescription(Privacy - Location Always Usage Description)NSLocationWhenInUseUsageDescription(Privacy - Location When In Use Usage Description)
在 iOS 指南 中阅读关于配置 Info.plist 的更多信息,了解如何在 Xcode 中设置 iOS 权限。
Android
此 API 需要在你的 AndroidManifest.xml 中添加以下权限:
<!-- Geolocation API -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature android:name="android.hardware.location.gps" />
前两个权限请求位置数据,包括精确和粗略定位,最后一行是可选的,但如果你的应用需要 GPS 才能运行,则是必需的。你可以省略它,但请注意这可能导致你的应用安装在缺乏 GPS 硬件的设备上。
在 Android 指南 中阅读关于设置权限 的更多信息,了解如何设置 Android 权限。
变量
此插件将使用以下项目变量(定义在你的应用的 variables.gradle 文件中):
playServicesLocationVersion版本号,对应com.google.android.gms:play-services-location(默认值:21.0.1)
示例
import { Geolocation } from '@capacitor/geolocation';
const printCurrentPosition = async () => {
const coordinates = await Geolocation.getCurrentPosition();
console.log('Current position:', coordinates);
};
API
getCurrentPosition(...)
getCurrentPosition(options?: PositionOptions | undefined) => Promise<Position>
获取设备的当前 GPS 位置
| 参数 | 类型 |
|---|---|
options | |
返回值:
Promise<Position>
自版本: 1.0.0
watchPosition(...)
watchPosition(options: PositionOptions, callback: WatchPositionCallback) => Promise<CallbackID>
设置位置变化监听。请注意,监听位置变化可能会消耗大量电量。请只在需要时明智地监听。
| 参数 | 类型 |
|---|---|
options | |
callback | |
返回值: Promise<string>
自版本: 1.0.0
clearWatch(...)
clearWatch(options: ClearWatchOptions) => Promise<void>
清除指定的监听
| 参数 | 类型 |
|---|---|
options | |
自版本: 1.0.0
checkPermissions()
checkPermissions() => Promise<PermissionStatus>
检查位置权限。如果系统位置服务被禁用,将抛出异常。
返回值:
Promise<PermissionStatus>
自版本: 1.0.0
requestPermissions(...)
requestPermissions(permissions?: GeolocationPluginPermissions | undefined) => Promise<PermissionStatus>
请求位置权限。如果系统位置服务被禁用,将抛出异常。
| 参数 | 类型 |
|---|---|
permissions | |
返回值:
Promise<PermissionStatus>
自版本: 1.0.0
接口
Position
| 属性 | 类型 | 描述 | 自版本 |
|---|---|---|---|
timestamp | number | 坐标的创建时间戳 | 1.0.0 |
coords | { latitude: number; longitude: number; accuracy: number; altitudeAccuracy: number | null; altitude: number | null; speed: number | null; heading: number | null; } | GPS 坐标以及数据的精确度 | 1.0.0 |
| 属性 | 类型 | 描述 | 默认值 | 始于 |
|---|---|---|---|---|
enableHighAccuracy | boolean | 高精度模式(如 GPS,如果可用)。在 Android 12+ 设备上,如果用户未授予 ACCESS_FINE_LOCATION 权限(可通过 location 别名检查),该设置将被忽略。 | false | 1.0.0 |
timeout | number | 等待位置更新的最长时间(毫秒)。在 Android 上,自插件版本 4.0.0 起,timeout 对 getCurrentPosition 方法将被忽略。 | 10000 | 1.0.0 |
maximumAge | number | 可接受的缓存位置的最大时间(毫秒) | 0 | 1.0.0 |
ClearWatchOptions
| 属性 | 类型 |
|---|---|
id | |
PermissionStatus
| 属性 | 类型 | 描述 | 始于 |
|---|---|---|---|
location | | location 别名的权限状态。在 Android 上,它会请求/检查 ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION 权限。在 iOS 和 Web 上,它会请求/检查位置权限。 | 1.0.0 |
coarseLocation | | coarseLocation 别名的权限状态。在 Android 上,它会请求/检查 ACCESS_COARSE_LOCATION 权限。在 Android 12+ 上,用户可以选择"大致位置"(ACCESS_COARSE_LOCATION)或"精确位置"(ACCESS_FINE_LOCATION),因此如果应用不需要高精度,可以使用此别名。在 iOS 和 Web 上,其值与 location 别名相同。 | 1.2.0 |
GeolocationPluginPermissions
| 属性 | 类型 |
|---|---|
permissions | GeolocationPermissionType[] |
类型别名
Position
一个 Position 是坐标数组。 https://tools.ietf.org/html/rfc7946#section-3.1.1 数组应包含 2 到 3 个元素。 之前的 GeoJSON 规范允许更多元素(例如,可用于表示 M 值),但当前规范仅允许定义 X、Y 和(可选的)Z。
number[]
WatchPositionCallback
(position: Position | null, err?: any): void
CallbackID
string
PermissionState
'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'
GeolocationPermissionType
'location' | 'coarseLocation'