/// <summary> /// Gets number of steps for current day /// </summary> /// <returns><c>true</c> if steps were successfully fetched, <c>false</c> otherwise</returns> private async Task <bool> GetStepsAsync() { // First try the pedometer try { var readings = await Pedometer.GetSystemHistoryAsync(DateTime.Now.Date, DateTime.Now - DateTime.Now.Date); _steps = StepCountData.FromPedometerReadings(readings); return(true); } catch (Exception) { // Continue to the fallback } // Fall back to using Lumia Sensor Core. IStepCounter stepCounter = null; try { //var qualifiers = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues; if (DeviceTypeHelper.GetDeviceFormFactorType() == DeviceFormFactorType.Phone) { stepCounter = await StepCounter.GetDefaultAsync(); StepCount count = await stepCounter.GetStepCountForRangeAsync(DateTime.Now.Date, DateTime.Now - DateTime.Now.Date); _steps = StepCountData.FromLumiaStepCount(count); } else { var obj = await SenseRecording.LoadFromFileAsync("Simulations\\short recording.txt"); if (!await CallSensorCoreApiAsync(async() => { stepCounter = await StepCounterSimulator.GetDefaultAsync(obj, DateTime.Now - TimeSpan.FromHours(12)); StepCount count = await stepCounter.GetStepCountForRangeAsync(DateTime.Now.Date, DateTime.Now - DateTime.Now.Date); _steps = StepCountData.FromLumiaStepCount(count); })) { return(false); } } } catch (Exception e) { _lastError = SenseHelper.GetSenseError(e.HResult); return(false); } finally { if (stepCounter != null && typeof(StepCounter) == stepCounter.GetType()) { ((StepCounter)stepCounter).Dispose(); } } return(true); }
/// <summary> /// Returns steps for given day at given resolution /// </summary> /// <param name="day">Day to fetch data for</param> /// <param name="resolution">Resolution in minutes. Minimum resolution is five minutes.</param> /// <returns>List of steps counts for the given day at given resolution.</returns> public async Task <List <KeyValuePair <TimeSpan, uint> > > GetStepsCountsForDay(DateTime day, uint resolution) { List <KeyValuePair <TimeSpan, uint> > steps = new List <KeyValuePair <TimeSpan, uint> >(); uint totalSteps = 0; uint numIntervals = (((24 * 60) / resolution) + 1); if (day.Date.Equals(DateTime.Today)) { numIntervals = (uint)((DateTime.Now - DateTime.Today).TotalMinutes / resolution) + 1; } for (int i = 0; i < numIntervals; i++) { TimeSpan ts = TimeSpan.FromMinutes(i * resolution); DateTime startTime = day.Date + ts; if (startTime < DateTime.Now) { try { var stepCount = await _stepCounter.GetStepCountForRangeAsync(startTime, TimeSpan.FromMinutes(resolution)); if (stepCount != null) { totalSteps += (stepCount.WalkingStepCount + stepCount.RunningStepCount); steps.Add(new KeyValuePair <TimeSpan, uint>(ts, totalSteps)); } } catch (Exception) { } } else { break; } } return(steps); }