public Task <bool> Start() { MvxTrace.TaggedTrace(MvxTraceLevel.Diagnostic, "Geofencing", "Start"); var tcs = new TaskCompletionSource <bool>(); bool result = false; UIKit.UIApplication.SharedApplication.InvokeOnMainThread(async() => { result = await GeofencingUtil.RequestPermissionAsync(); if (result) { GeofencingProvider.UpdateRegionLeft += OnUpdateRegionLeft; GeofencingProvider.RegionEntered += OnRegionEntered; GeofencingProvider.InitGeoFencing(); await SetupRegions(); } tcs.TrySetResult(result); }); return(tcs.Task); }
public async Task Stop() { MvxTrace.TaggedTrace(MvxTraceLevel.Error, "Geofencing", "Stop"); var result = await GeofencingUtil.RequestPermissionAsync(); if (result) { GeofencingProvider.UpdateRegionLeft -= OnUpdateRegionLeft; GeofencingProvider.RegionEntered -= OnRegionEntered; GeofencingProvider.SetRegions(new System.Collections.Generic.List <CoreLocation.CLCircularRegion>()); } }
protected virtual async Task SetupRegions() { var location = await GeofencingUtil.GetCurrentLocationAsync(); try { MvxTrace.TaggedTrace(MvxTraceLevel.Diagnostic, "Geofencing", "Setup regions"); var response = await AreaService.Instance.LoadAreasByUserLocation(location.Coordinate.Latitude, location.Coordinate.Longitude); var geofencingRegions = response.Select(area => GeofencingProvider.CreateRegion(area.Latitude, area.Longitude, area.Radius, area.ID)) .ToList(); var updateRegion = GeofencingProvider.CreateUpdateRegion(location.Coordinate.Latitude, location.Coordinate.Longitude, _updateRadius); GeofencingProvider.SetRegions(geofencingRegions, updateRegion); } catch (Exception ex) { MvxTrace.TaggedTrace(MvxTraceLevel.Error, "Geofencing", ex.BuildAllMessagesAndStackTrace()); } }