用于通用应用程序的异步计步器.GetSystemHistoryAsync API崩溃

时间:2016-09-20 18:36:50

标签: c# asynchronous win-universal-app unhandled-exception pedometer

我试图将一个在Windows 10手机上使用计步器数据的简单应用程序放在一起。我通常住在kernel-land,这是我第一次使用大多数c#异步的东西,所以我想知道我是否错过了这里的核心概念。

我首次尝试获取数据的目的是简单地将过去一小时内记录的步数报告给我的XAML应用中的文本框。我刚刚创建了一个基本的XAML应用程序,删除了一个文本框,并添加了这个事件处理程序:

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    var history = await Pedometer.GetSystemHistoryAsync(DateTimeOffset.Now.AddHours(-1), TimeSpan.FromHours(1));
    int count = history.Sum(entry => entry.CumulativeSteps);
    textSteps.Text = count.ToString();
}

第一行的断点触发,但在它到达下一行之前,我得到一个未处理的异常。错误代码-2147467259,消息"错误HRESULT E_FAIL已从调用COM组件返回。"

堆栈的顶部框架在我的代码中,但它只是来自App.g.i.cs的样板行,触发了未处理异常的中断。下面是mscorlib和WinRT调用者。

我查看了清单中的应用功能列表,但没有找到任何看似应用于计步器的内容。我在Lumia 950上测试了这个。

更新:我刚试过调用API来获取默认的计步器传感器:

Pedometer p = await Pedometer.GetDefaultAsync();

事实证明,这会触发具有相同无价值堆栈的访问被拒绝异常。我目前正在做更多的研究,看看是否有需要在清单中指定的东西。

2 个答案:

答案 0 :(得分:1)

经过进一步的实验,我得到了一个拒绝访问的错误,我更多地查看了清单。计步器的清单Microsoft示例项目声明了一个设备属性,我无法通过设计器视图找到添加方法。将它添加到代码中工作得很好。它说我在最后一小时内已经采取了300,000步,但我确定一些简单的调试会在那里找到答案。 (该属性称为CumulativeSteps,因此这是一个很好的提示......)

<Capabilities>
    <DeviceCapability Name="activity" />
</Capabilities>

答案 1 :(得分:0)

var currentReadings = await Pedometer.GetSystemHistoryAsync(DateTime.Today);
                var walklist = new List<PedometerReading>();
                var runlist = new List<PedometerReading>();
                foreach (var cuurentreading in currentReadings)
                {
                    if (cuurentreading.StepKind == PedometerStepKind.Walking)
                    {
                        walklist.Add(cuurentreading);
                    }
                    if (cuurentreading.StepKind == PedometerStepKind.Running)
                    {
                        runlist.Add(cuurentreading);
                    }
                }
                var item = walklist.Last();
                var item1 = walklist.First();
                var item2 = runlist.Last();
                var item3 = runlist.First();
                Steps1.Value += (item.CumulativeSteps - item1.CumulativeSteps);
                Steps1.Value += (item2.CumulativeSteps - item3.CumulativeSteps);