跳到主要内容
版本:v4

@capacitor/geolocation

该地理定位 API 提供简单方法来获取和追踪设备当前 GPS 位置信息,包括海拔、方向和速度等可用数据。

安装

npm install @capacitor/geolocation
npx cap sync

iOS

苹果公司要求在 Info.plist 中为位置信息配置隐私说明:

  • NSLocationAlwaysUsageDescription (隐私 - 始终使用位置描述)
  • NSLocationWhenInUseUsageDescription (隐私 - 使用期间访问位置描述)

阅读 iOS 指南 中的 配置 Info.plist 章节,了解如何在 Xcode 中设置 iOS 权限的更多信息。

Android

此 API 需要在 AndroidManifest.xml 中添加以下权限:

<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 (默认值:20.0.0)

示例

import { Geolocation } from '@capacitor/geolocation';

const printCurrentPosition = async () => {
const coordinates = await Geolocation.getCurrentPosition();

console.log('当前位置:', coordinates);
};

API

getCurrentPosition(...)

getCurrentPosition(options?: PositionOptions | undefined) => Promise<Position>

获取设备当前 GPS 位置

参数类型
options
PositionOptions

返回值:

Promise<Position>

自版本: 1.0.0


watchPosition(...)

watchPosition(options: PositionOptions, callback: WatchPositionCallback) => Promise<CallbackID>

设置位置变化监听。注意持续监听位置变化会消耗大量电量。请仅在需要时合理使用。

参数类型
options
PositionOptions
callback
WatchPositionCallback

返回值: Promise<string>

自版本: 1.0.0


clearWatch(...)

clearWatch(options: ClearWatchOptions) => Promise<void>

清除指定的位置监听

参数类型
options
ClearWatchOptions

自版本: 1.0.0


checkPermissions()

checkPermissions() => Promise<PermissionStatus>

检查位置权限。如果系统定位服务被禁用将抛出异常。

返回值:

Promise<PermissionStatus>

自版本: 1.0.0


requestPermissions(...)

requestPermissions(permissions?: GeolocationPluginPermissions | undefined) => Promise<PermissionStatus>

请求位置权限。如果系统定位服务被禁用将抛出异常。

参数类型
permissions
GeolocationPluginPermissions

返回值:

Promise<PermissionStatus>

自版本: 1.0.0


Interfaces

Position

属性类型描述版本
timestampnumber坐标创建时间戳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

PositionOptions

属性类型描述默认值版本
enableHighAccuracyboolean高精度模式(如启用 GPS 等)。在 Android 12+ 设备上,如果用户未授予 ACCESS_FINE_LOCATION 权限(可通过 location 别名检查),此设置将被忽略。false1.0.0
timeoutnumber获取位置更新的最大等待时间(毫秒)。在 Android 中,自插件 4.0.0 版本起,getCurrentPosition 会忽略 timeout 参数。100001.0.0
maximumAgenumber可接受的缓存位置的最大年龄(毫秒)01.0.0

ClearWatchOptions

属性类型
id
CallbackID

PermissionStatus

属性类型描述版本
location
PermissionState
位置权限状态。在 Android 上会同时请求/检查 ACCESS_COARSE_LOCATION 和 ACCESS_FINE_LOCATION 权限。在 iOS 和网页端会请求/检查位置权限。1.0.0
coarseLocation
PermissionState
粗略位置权限状态。在 Android 上会请求/检查 ACCESS_COARSE_LOCATION。在 Android 12+ 上,用户可以选择"大致位置"(ACCESS_COARSE_LOCATION)或"精确位置"(ACCESS_FINE_LOCATION),因此当应用不需要高精度时可以使用此别名。在 iOS 和网页端,该值将与 location 别名相同。1.2.0

GeolocationPluginPermissions

属性类型
permissionsGeolocationPermissionType[]

Type Aliases

WatchPositionCallback


  (position: Position | null, err?: any): void

CallbackID

string

PermissionState

'prompt' | 'prompt-with-rationale' | 'granted' | 'denied'

GeolocationPermissionType

'location' | 'coarseLocation'