private void AddPhasedFences(int activityId, string activityName) { FenceUpdateRequestBuilder addFencesRequestBuilder = new FenceUpdateRequestBuilder(); UpdateRequestBuilder(activityId, activityName, ActivityPhase.Starting, FenceUpdateAction.Add, ref addFencesRequestBuilder); UpdateRequestBuilder(activityId, activityName, ActivityPhase.During, FenceUpdateAction.Add, ref addFencesRequestBuilder); UpdateRequestBuilder(activityId, activityName, ActivityPhase.Stopping, FenceUpdateAction.Add, ref addFencesRequestBuilder); UpdateFences(addFencesRequestBuilder.Build()); }
protected override async Task StopListeningAsync() { await base.StopListeningAsync(); // remove location fence FenceUpdateRequestBuilder locationFenceRequestBuilder = new FenceUpdateRequestBuilder(); UpdateRequestBuilder(null, AWARENESS_EXITING_LOCATION_FENCE_KEY, FenceUpdateAction.Remove, ref locationFenceRequestBuilder); await UpdateFencesAsync(locationFenceRequestBuilder.Build()); }
protected override void StopListening() { // remove location fence FenceUpdateRequestBuilder locationFenceRequestBuilder = new FenceUpdateRequestBuilder(); UpdateRequestBuilder(null, AWARENESS_EXITING_LOCATION_FENCE_KEY, FenceUpdateAction.Remove, ref locationFenceRequestBuilder); UpdateFences(locationFenceRequestBuilder.Build()); base.StopListening(); }
private async Task RequestLocationSnapshotAsync() { if (await CrossPermissions.Current.CheckPermissionStatusAsync(Permission.Location) == PermissionStatus.Granted) { // store current location ILocationResult locationResult = await Awareness.SnapshotApi.GetLocationAsync(AwarenessApiClient); global::Android.Locations.Location location = locationResult.Location; DateTimeOffset timestamp = new DateTimeOffset(1970, 1, 1, 0, 0, 0, new TimeSpan()).AddMilliseconds(location.Time); await StoreDatumAsync(new LocationDatum(timestamp, location.HasAccuracy ? location.Accuracy : -1, location.Latitude, location.Longitude)); // replace the previous location fence with one around the current location. additions and removals are handled // in the order specified below. FenceUpdateRequestBuilder locationFenceRequestBuilder = new FenceUpdateRequestBuilder(); UpdateRequestBuilder(null, AWARENESS_EXITING_LOCATION_FENCE_KEY, FenceUpdateAction.Remove, ref locationFenceRequestBuilder); AwarenessFence locationFence = LocationFence.Exiting(location.Latitude, location.Longitude, _locationChangeRadiusMeters); UpdateRequestBuilder(locationFence, AWARENESS_EXITING_LOCATION_FENCE_KEY, FenceUpdateAction.Add, ref locationFenceRequestBuilder); await UpdateFencesAsync(locationFenceRequestBuilder.Build()); } }
private void RemovePhasedFences(int activityId, string activityName) { try { FenceUpdateRequestBuilder removeFencesRequestBuilder = new FenceUpdateRequestBuilder(); UpdateRequestBuilder(activityId, activityName, ActivityPhase.Starting, FenceUpdateAction.Remove, ref removeFencesRequestBuilder); UpdateRequestBuilder(activityId, activityName, ActivityPhase.During, FenceUpdateAction.Remove, ref removeFencesRequestBuilder); UpdateRequestBuilder(activityId, activityName, ActivityPhase.Stopping, FenceUpdateAction.Remove, ref removeFencesRequestBuilder); if (!UpdateFences(removeFencesRequestBuilder.Build())) { // we'll catch this immediately throw new Exception("Failed to remove fence (e.g., timed out)."); } } catch (Exception ex) { SensusServiceHelper.Get().Logger.Log("Exception while removing fence: " + ex, LoggingLevel.Normal, GetType()); } }
protected override void StopListening() { RemovePhasedFences(DetectedActivityFence.InVehicle, nameof(DetectedActivityFence.InVehicle)); RemovePhasedFences(DetectedActivityFence.OnBicycle, nameof(DetectedActivityFence.OnBicycle)); RemovePhasedFences(DetectedActivityFence.OnFoot, nameof(DetectedActivityFence.OnFoot)); RemovePhasedFences(DetectedActivityFence.Running, nameof(DetectedActivityFence.Running)); RemovePhasedFences(DetectedActivityFence.Still, nameof(DetectedActivityFence.Still)); RemovePhasedFences(DetectedActivityFence.Unknown, nameof(DetectedActivityFence.Unknown)); RemovePhasedFences(DetectedActivityFence.Walking, nameof(DetectedActivityFence.Walking)); // remove location fence FenceUpdateRequestBuilder locationFenceRequestBuilder = new FenceUpdateRequestBuilder(); UpdateRequestBuilder(null, AWARENESS_EXITING_LOCATION_FENCE_KEY, FenceUpdateAction.Remove, ref locationFenceRequestBuilder); UpdateFences(locationFenceRequestBuilder.Build()); // stop broadcast receiver Application.Context.UnregisterReceiver(_awarenessBroadcastReciever); // disconnect client _awarenessApiClient.Disconnect(); }
protected void UpdateRequestBuilder(AwarenessFence fence, string fenceKey, FenceUpdateAction action, ref FenceUpdateRequestBuilder requestBuilder) { if (action == FenceUpdateAction.Add) { requestBuilder.AddFence(fenceKey, fence, _fencePendingIntent); } else if (action == FenceUpdateAction.Remove) { requestBuilder.RemoveFence(fenceKey); } }
private void UpdateRequestBuilder(int activityId, string activityName, ActivityPhase phase, FenceUpdateAction action, ref FenceUpdateRequestBuilder requestBuilder) { AwarenessFence fence = null; if (phase == ActivityPhase.Starting) { fence = DetectedActivityFence.Starting(activityId); } else if (phase == ActivityPhase.During) { fence = DetectedActivityFence.During(activityId); } else if (phase == ActivityPhase.Stopping) { fence = DetectedActivityFence.Stopping(activityId); } else { SensusException.Report("Unknown activity phase: " + phase); return; } UpdateRequestBuilder(fence, activityName + "." + phase, action, ref requestBuilder); }