@nativescript/geolocation

Overview

Geolocation plugin to use for getting current location, monitor movement, etc.

ns plugin add @nativescript/geolocation

Usage

The best way to explore the usage of the plugin is to inspect the demo app in the plugin's root folder. In demo folder you can find the usage of the plugin for TypeScript non-Angular application. Refer to demo/app/main-page.ts.

In short here are the steps:

Import the plugin

import * as geolocation from '@nativescript/geolocation'
import { CoreTypes } from '@nativescript/core'
CoreTypes.Accuracy // used to describe at what accuracy the location should be get

Request permissions

geolocation.enableLocationRequest()

Call plugin methods

// Get current location with high accuracy
geolocation.getCurrentLocation({
  desiredAccuracy: Accuracy.high,
  maximumAge: 5000,
  timeout: 20000
})

API

Properties

Location

PropertyDefaultDescription
latitude-The latitude of the geolocation, in degrees.
longitude-The longitude of the geolocation, in degrees.
altitude-The altitude (if available), in meters above sea level.
horizontalAccuracy-The horizontal accuracy, in meters.
verticalAccuracy-The vertical accuracy, in meters.
speed-The speed, in meters/second over ground.
timestamp-The time at which this location was determined.

Options

PropertyDefaultDescription
desiredAccuracy?Accuracy.highThis will return the finest location available but use more power than any option. Accuracy.any is considered to be about 100 meter accuracy. Using a coarse accuracy such as this often consumes less power.
updateDistanceNo filterUpdate distance filter in meters. Specifies how often to update the location. Read more in Apple document and/or Google documents
updateTime1 minuteInterval between location updates, in milliseconds (ignored on iOS). Read more in Google document.
minimumUpdateTime5 secsMinimum time interval between location updates, in milliseconds (ignored on iOS). Read more in Google document.
maximumAge-How old locations to receive in ms.
timeout5 minutesHow long to wait for a location in ms.
iosAllowsBackgroundLocationUpdatesfalseIf enabled, UIBackgroundModes key in info.plist is required (check the hint below). Allow the application to receive location updates in background (ignored on Android). Read more in Apple document
iosPausesLocationUpdatesAutomaticallytrueAllow deactivation of the automatic pause of location updates (ignored on Android). Read more in Apple document

Note

If iosAllowsBackgroundLocationUpdates is set to true, the following code is required in the info.plist file of your application inside App_Resources/iOS:

<key>UIBackgroundModes</key>
<array>
   <string>location</string>
</array>

Methods

MethodReturnsDescription
getCurrentLocation(options: Options)Promise<Location>Get current location applying the specified options (if any). Since version 5.0 of the plugin, it will use requestLocation API for devices using iOS 9.0+. In situation of poor or no GPS signal, but available Wi-Fi it will take 10 sec to return location.
watchLocation(successCallback: successCallbackType, errorCallback: errorCallbackType, options: Options)numberMonitor for location change.
clearWatch(watchId: number)voidStop monitoring for location change. Parameter expected is the watchId returned from watchLocation.
enableLocationRequest(always?: boolean, iosOpenSettingsIfLocationHasBeenDenied?: boolean)Promise<void>Ask for permissions to use location services. The options are applicable only for iOS. When always is true, it opens a custom prompt message and the following keys are required: NSLocationAlwaysAndWhenInUseUsageDescription (iOS 11.0+) OR NSLocationAlwaysUsageDescription (iOS 8.0-10.0) and NSLocationWhenInUseUsageDescription. Read more about request always usage. When iosOpenSettingsIfLocationHasBeenDenied is true, the settings app will open on iOS so the user can change the location services permission.
isEnabledPromise<boolean>Resolves true or false based on the location services availability.
distance(loc1: Location, loc2: Location)numberCalculate the distance between two locations. Returns the distance in meters.

Known Issues

Version Conflicts – Google Play Services

If you have installed multiple plugins that use the Google Play Services you might run into version conflicts. For example, you may encounter the error below when using the nativescript-google-maps-sdk plugin:

Cannot enable the location service. Error: java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/internal/zzbck;

In order to fix this you might pin the version number in your app/App_Resources/Android/before-plugins.gradle file (if the file does not exist, just create it):

android {  
  // other stuff here

  project.ext {
    googlePlayServicesVersion = "16.+"
  }
}

License

Apache License Version 2.0