コード例 #1
0
        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());
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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());
            }
        }
コード例 #5
0
        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());
            }
        }
コード例 #6
0
        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();
        }
コード例 #7
0
 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);
     }
 }
コード例 #8
0
        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);
        }