npm i --save nativescript-geolocation
- 版本:5.1.0
- GitHub: https://github.com/NativeScript/nativescript-geolocation
- NPM: https://npmjs.net.cn/package/nativescript-geolocation
- 下载
- 昨日: 3
- 上周: 21
- 上月: 246
NativeScript Geolocation
用于获取当前位置、监控移动等的地理定位插件。
安装
在命令提示符 / 终端中导航到您的应用程序根目录并运行
tns plugin add nativescript-geolocation
用法
探索插件用法的最佳方式是检查插件根目录中的演示应用。在 demo
文件夹中,您可以找到 TypeScript 非 Angular 应用的插件用法。请参考 demo/app/main-page.ts
。
简要来说,以下是步骤
导入插件
TypeScript
import * as geolocation from "nativescript-geolocation";
import { Accuracy } from "tns-core-modules/ui/enums"; // used to describe at what accuracy the location should be get
JavaScript
var geolocation = require("nativescript-geolocation");
请求权限
geolocation.enableLocationRequest();
调用插件方法
// Get current location with high accuracy
geolocation.getCurrentLocation({ desiredAccuracy: Accuracy.high, maximumAge: 5000, timeout: 20000 })
API
属性
位置
属性 | 默认值 | 描述 |
---|---|---|
latitude | - | 地理定位的纬度,以度为单位。 |
longitude | - | 地理定位的经度,以度为单位。 |
altitude | - | (如有)海拔高度,以海平面以上米为单位。 |
horizontalAccuracy | - | 水平精度,以米为单位。 |
verticalAccuracy | - | 垂直精度,以米为单位。 |
speed | - | 速度,以每秒米为单位(地面速度)。 |
timestamp | - | 确定此位置的时间。 |
选项
属性 | 默认值 | 描述 |
---|---|---|
desiredAccuracy? | Accuracy.high | 这将返回可用的最佳位置,但比 any 选项消耗更多电量。 Accuracy.any 被认为是大约 100 米的精度。使用这种粗精度通常消耗更少的电量。 |
updateDistance | 无过滤器 | 更新距离过滤器,以米为单位。指定更新位置的时间间隔。更多内容请参阅 Apple 文档 和/或 Google 文档 |
updateTime | 1 分钟 | 位置更新之间的间隔,以毫秒为单位(iOS 上忽略)。更多内容请参阅 Google 文档。 |
minimumUpdateTime | 5 秒 | 位置更新之间的最小时间间隔,以毫秒为单位(iOS 上忽略)。更多内容请参阅 Google 文档。 |
maximumAge | - | 接收位置的年龄(以毫秒为单位)。 |
timeout | 5 分钟 | 等待位置的时间(以毫秒为单位)。 |
iosAllowsBackgroundLocationUpdates | false | 如果启用,则 info.plist 中的 UIBackgroundModes 键是必需的(请参阅下面的提示)。允许应用程序在后台接收位置更新(Android 上忽略)。更多内容请参阅 Apple 文档 |
iosPausesLocationUpdatesAutomatically | true | 允许禁用位置更新的自动暂停(Android 上忽略)。更多内容请参阅 Apple 文档 |
iosOpenSettingsIfLocationHasBeenDenied | false | 在 enableLocationRequest 上的参数。如果为 true,则 iOS 上的设置应用将打开,用户可以更改位置服务权限。 |
如果 iosAllowsBackgroundLocationUpdates 设置为 true,则 info.plist 文件中需要以下代码
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
方法
方法 | 返回值 | 描述 |
---|---|---|
getCurrentLocation(options: Options) | Promise |
根据指定的选项获取当前位置(如果有)。自插件版本5.0起,对于使用iOS 9.0+的设备,将使用requestLocation API。在GPS信号差或无GPS信号但可用Wi-Fi的情况下,将花费10秒返回位置。 |
watchLocation(successCallback: successCallbackType, errorCallback: errorCallbackType, options: Options) | number | 监控位置变化。 |
clearWatch(watchId: number) | void | 停止监控位置变化。预期参数是来自 watchLocation 的 watchId。 |
enableLocationRequest(always?: boolean) | Promise<void> | 请求使用位置服务的权限。选项 always 仅适用于iOS。对于iOS上的自定义提示消息,需要以下键。NSLocationAlwaysUsageDescription,NSLocationUsageDescription和NSLocationWhenInUseUsageDescription 了解更多关于其使用方法。 |
isEnabled | Promise<boolean> | 根据位置服务的可用性解析为 true 或 false 。 |
distance(loc1: Location, loc2: Location) | number | 计算两个位置之间的距离。返回以米为单位的大距。 |
已知问题
版本冲突 - Google Play Services
如果您安装了多个使用Google Play Services的插件,可能会遇到版本冲突。例如,当使用nativescript-google-maps-sdk插件时,可能会遇到以下错误
Cannot enable the location service. Error: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/internal/zzbck;
为了解决这个问题,您可以在 app/App_Resources/Android/before-plugins.gradle
文件中固定版本号(如果该文件不存在,则创建它)
android {
// other stuff here
project.ext {
googlePlayServicesVersion = "16.+"
}
}
贡献
我们喜欢PRs!查看贡献指南。如果您想贡献,但不确定从哪里开始 - 寻找标记为 help wanted
的问题。
获取帮助
请,仅使用github issues 报告错误或请求新功能。对于一般问题和支持,请查看Stack Overflow或在我们的NativeScript社区Slack频道中咨询专家。