Geolocation

Tip

This article covers Uno-specific information for Geolocation. For a full description of the feature and instructions on using it, see Windows.Devices.Geolocation Namespace

  • The Windows.Devices.Geolocation.Geolocator class provides APIs for getting the current location or tracking the device's location over time. Location information may come from estimating a position from beacons like Wi-Fi access points and cell towers, from the device's IP address, or may come from other sources such as a GNSS or GPS device.

Geolocator

The following Geolocator APIs are implemented on Android, iOS, macOS, and WASM:

  • RequestAccessAsync
  • GetGeolocationAsync
  • PositionChanged
  • StatusChanged
  • DefaultGeoposition
  • IsDefaultGeopositionRecommended
  • LocationStatus
  • DesiredAccuracy
  • DesiredAccuracyInMeters

Platform-specific Requirements

Android

When using the RequestAccessAsync method on Android, you must configure one permission before using this API in your project. To do so, add the following to your AndroidManifest.xml file:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

Additionally, when checking for this permission, ensure that IsLocationEnabled returns true; otherwise, the method will return GeolocationAccessStatus.Denied.

Implementation notes

StatusChanged event is delivered to all Geolocator instances which have subscribers as a "broadcast". This is unusual, but in line with the UWP implementation.

WASM

On WebAssembly, RequestAccessAsync requires querying for position info, which triggers the user permission dialog. For the developer, it should behave the same way as in UWP. We recommend showing the user instructions on how to enable geolocation if it is Denied via a dialog message for example, if you require the feature for the functionality of your app.

GetGeolocationAsync creates a single request for position. The parameterless version of the method works a bit differently from UWP - the default timeout period is 60 seconds there, but in reality, the code never waits for so long even if user requests higher accuracy. Hence, the default timeout in Uno Platform implementation is currently set to 10 seconds.

WebAssembly does not allow setting explicit meter-based accuracy for Geolocation and has only a standard and high level of accuracy. The high accuracy option is used when DesiredAccuracy is High or DesiredAccuracyInMeters is lower than 50. The GetGeolocationAsync implementation utilizes the set timeout period to try to improve the accuracy of the positioning. If better accuracy is not achieved, the last available result is used.