nativescript-geolocation
为 NativeScript 应用提供获取和监控位置的 API。
npm i --save nativescript-geolocation

NativeScript Geolocation apple android

npm npm Build Status

用于获取当前位置、监控移动等的地理定位插件。

安装

在命令提示符 / 终端中导航到您的应用程序根目录并运行

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> 根据位置服务的可用性解析为 truefalse
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频道中咨询专家。