1

Ich versuche, eine einfache App, die Schrittzähler Daten auf einem Windows 10-Telefon verwendet. Normalerweise lebe ich im Kernel-Land, und das ist das erste Mal, dass ich die meisten C# Async-Sachen benutze, also frage ich mich, ob mir hier ein Kernkonzept fehlt.Async Pedometer.GetSystemHistoryAsync-API für Universal-Apps stürzt ab

Mein erster Versuch, Daten zu erhalten, bestand darin, einfach die Anzahl der aufgezeichneten Schritte der letzten Stunde in einem Textfeld in meiner XAML-App zu melden. Ich habe nur einen einfachen XAML-App, fiel in ein Textfeld, und hinzugefügt, um diese Ereignishandler:

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(); 
} 

Ein Haltepunkt in der ersten Zeile löst, aber bevor es die nächste Zeile trifft erhalte ich eine nicht behandelte Ausnahme. Fehlercode -2147467259, Nachricht "Fehler HRESULT E_FAIL wurde von einem Aufruf an eine COM-Komponente zurückgegeben."

Der oberste Frame des Stacks befindet sich in meinem Code, aber es ist nur die BoilerPlate-Zeile von App.g.i.cs, die eine Pause bei einer nicht behandelten Ausnahme auslöst. Darunter ist mscorlib und der WinRT-Aufrufer.

Ich schaute durch die Liste der App-Funktionen im Manifest und fand nichts, was aussah wie es auf den Schrittzähler angewendet wurde. Ich teste diese auf einem Lumia 950.

UPDATE: Ich habe gerade versucht, die API-Aufruf der Standard-Pedometer-Sensor zu erhalten:

Pedometer p = await Pedometer.GetDefaultAsync(); 

Es stellt sich heraus, dass dies löst eine Zugriff verweigert Ausnahme mit der gleichen wertlos Stapel. Ich mache derzeit mehr Forschung, um zu sehen, ob etwas im Manifest spezifiziert werden muss.

Antwort

1

Nach weiteren Experimenten bekam ich einen Zugriff verweigert Fehler, ich schaute in das Manifest mehr. Das Manifest-Microsoft-Beispielprojekt für den Schrittzähler deklariert eine Geräteeigenschaft, die ich über die Designeransicht nicht finden kann. Das Hinzufügen zum Code funktionierte perfekt. Es heißt, ich habe in der letzten Stunde 300.000 Schritte gemacht, aber ich bin mir sicher, dass ein einfaches Debuggen dort die Antwort finden wird. (Die Eigenschaft heißt CumulativeSteps, das ist also ein guter Hinweis ...)

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