Skip to content

TMSFMXNativeCLLocationManager

Usage

The TMSFMXNativeCLLocationManager component is the central point for configuring the delivery of location- and heading-related events to your app. You use this component to establish the parameters that determine when location and heading events should be delivered and to start and stop the actual delivery of those events.

Methods

Methods name Desription
AuthorizationStatus The status of the location manager. When your application isn’t authorized to receive location you will receive an asAuthorizationStatusRestricted / asAuthorationStatusDenied value. When the value is asAuthorizationStatusNotDetermined your application needs to ask permissions before starting to monitor location and/or heading updates.
DismissHeadingCalibrationDisplay When monitoring heading updates the location manager might display a heading calibration window which can be dismissed with this method. The calibration window is only shown when True is returned in the OnShouldDisplayHeadingCalibration event.
Heading The last active heading managed by the location manager.
HeadingAvailable Verify if the location manager can monitor heading updates.
Location The last active location managed by the location manager.
LocationManager Returns a reference to the native CLLocationManager instance.
LocationServicesEnabled Verify if the location services are enabled before starting to monitor for location updates.
RequestAlwaysAuthorization When the AuthorizationStatus is not determined, request an “Always” authorization status for your application with this method. The OnDidChangeAuthorizationStatus is called when the status changes.
RequestWhenInUseAuthorization When the AuthorizationStatus is not determined, request a “When In Use” authorization status for your application with this method. The OnDidChangeAuthorizationStatus is called when the status changes.
SignificantLocationChangeMonitoringAvailable Verify if the location manager can monitor location updates, which will update after a significant difference is detected between the initial value and the value that is monitored.
StartMonitoringSignificantLocationChanges Start monitoring for location changes that are only retrieved when a significant difference is detected.
StartUpdatingHeading Start monitoring for heading updates.
StartUpdatingLocation Start monitoring for location changes.
StopMonitoringSignificantLocationChanges Stop monitoring for significant location changes.
StopUpdatingHeading Stop monitoring for heading updates.
StopUpdatingLocation Stop monitoring for location changes.

Properties

Properties name Description
ActivityType The type of activity that is executed for monitoring location and heading updates through the location manager.
DesiredAccuracy The accuracy of the location data in meters. If the value is -1, the location manager automatically determines the best accuracy for your device.
DistanceFilter The minimum distance (measured in meters) a device must move horizontally before an update event is generated.
HeadingOrientation The device orientation to use when computing heading values.
PausesLocationUpdatesAutomatically Property to configure automatic pausing and resuming of location changes.

Events

Events name Description
OnDidChangeAuthorizationStatus Event called when the authorization status for your app changes.
OnDidFailWithError Event called when the location manager fails updating location/heading.
OnDidPauseLocationUpdates Event called automatically when the location manager has paused location update changes.
OnDidResumeLocationUpdates Event called automatically when the location manager has resumed location update changes.
OnDidUpdateHeading Event called when the heading changes.
OnDidUpdateLocations Event called when the location changes.
OnShouldDisplayHeadingCalibration Event that could be called if the device needs to calibrate the heading when monitored by your application.

Sample authorization and managing the location updates

The code below verifies if the location services are enabled and if your application is authorized to use location updates. The first time the application starts, the user will be prompted with an authorization dialog which asks permissions to use location updates. Afterwards, the method StartUpdatingLocation will be called and the annotation with the location of the device will be added to the map.

if TMSFMXNativeCLLocationManager1.LocationServicesEnabled then
begin
  if TMSFMXNativeCLLocationManager1.AuthorizationStatus = asAuthorizationStatusNotDetermined then
    TMSFMXNativeCLLocationManager1.RequestAlwaysAuthorization
  else
    StartLocationUpdates;
end;

procedure TForm1.StartLocationUpdates;
begin
  TMSFMXNativeCLLocationManager1.StartUpdatingLocation;
end;
procedure TForm1.TMSFMXNativeCLLocationManager1DidChangeAuthorizationStatus(
  Sender: TObject;
  AAuthorizationStatus: TTMSFMXNativeCLLocationManagerAuthorizationStatus);
begin
  if AAuthorizationStatus = asAuthorizationStatusAuthorizedAlways then
    StartLocationUpdates;
end;

procedure TForm1.TMSFMXNativeCLLocationManager1DidUpdateLocations(
  Sender: TObject;
  ALocations: TArray<FMX.TMSNativeUICore.TTMSFMXNativeCLLocation>);
var
  ann: TTMSFMXNativeMKAnnotation;
begin
  if Length(ALocations) > 0 then
  begin
    TMSFMXNativeMKMapView1.BeginUpdate;
    if TMSFMXNativeMKMapView1.Annotations.Count = 0 then
      ann := TMSFMXNativeMKMapView1.Annotations.Add
    else
      ann := TMSFMXNativeMKMapView1.Annotations[0];

    ann.Location := MakeMapLocation(ALocations[0].Coordinate.Latitude, ALocations[0].Coordinate.Longitude);
    TMSFMXNativeMKMapView1.SetCenterLocation(ann.Location, True);
    TMSFMXNativeMKMapView1.EndUpdate;
  end;
end;