private void LocationService_OnPositionEstimateChange(object sender, LocationService.PositionEstimateEventArgs e) { WifiSnifferPositioningService.PositionEstimate location = e.PositionEstimate; //TODO: Insert a check for whether we need to shift building //location.Building_ID != lastKnownWifiLocation //The rest is part of an else block mCurrentEstimatedFloor = (int)location.Altitude; //placed here because we check floor before updating location //First check if we are even interested in receiving position updates? if (!IsTrackingPosition) return; //Then check whether we need to update floor //We change floor if this is the very first wifi location or the location is estimated //at a new floor bool doChangeFloor = false; //Beware: If the locationService changes semantics to broadcasting null estimates (in case of error) //then this null check will not be a valid indicator of a floor change if (lastKnownWifiLocation == null) //No prior pos: We change floor { doChangeFloor = true; } else //Check for new floor { int prevFloor = (int)lastKnownWifiLocation.Altitude; if (prevFloor != mCurrentEstimatedFloor) doChangeFloor = true; } lastKnownWifiLocation = location; if (doChangeFloor) { mCurrentSelectedFloor = mCurrentEstimatedFloor; //Globals.ShowDialog(source, "Changing to new floor...", Globals.DURATION_SHORT); refreshUI(); } //the threshold based check for whether to update the location is conducted in updateNewLocation() //as it applies to gps and wi-fi alike updateNewLocation(location); }
void LocationService_OnBuildingIdentificationChange(object sender, LocationService.BuildingIdentificationEventArgs e) { if (e.BuildingFound) { LocationService.DownloadRadioMap(e.BuildingId); } else { if (OnNoBuildingFound != null) OnNoBuildingFound(this, EventArgs.Empty); } }