2017-06-07 5 views
1

Ich versuche Extended Execution in meiner Windows 10 UWP App zum Zwecke der Standortverfolgung zu verwenden. Es gibt viele Beispiele dafür online. Ich benutze im Grunde diesen allgemeinen Block des Codes.Windows 10 Mobile App Extended Ausführung wird immer verweigert

using (var session = new ExtendedExecutionSession()) 
{ 
    session.Reason = ExtendedExecutionReason.LocationTracking; 
    session.Description = "Tracking your location"; 
    session.Revoked += NewSession_Revoked; 
    var result = await session.RequestExtensionAsync(); 

    switch (result) 
    { 
     case ExtendedExecutionResult.Allowed: 
      await StartLocationTrackingAsync(); 
      break; 
     default: 
      case ExtendedExecutionResult.Denied: 
      //Notify user or log this. 
      break; 
    } 
} 

Dieser Codeblock wird in den Suspending Ereignishandler für meine app, wie diese ausgeführt:

public Scenario1() 
{ 
    this.InitializeComponent(); 
    Application.Current.Suspending += Current_Suspending; 
} 

private async void Current_Suspending(object sender, Windows.ApplicationModel.SuspendingEventArgs e) 
{ 
    //Do my extended execution request here. 
} 

Das ich die erste Problem hatte, war ich nicht, dass Ereignis sogar Feuer bekommen könnte, aber ich gelesen auf SO, dass VS Ihre App beim Debuggen nicht aussetzt. Also, ich zwang es zu suspendieren mit der Lifecycle-Ereignisse Drop-down in VS. Jetzt bekomme ich das Suspending-Ereignis jedes Mal erhöht, was gut ist.

Wenn ich jedoch die erweiterte Ausführungssitzung anfordert, wird sie jedes Mal verweigert. Ich habe auf dem Emulator und auf meinem physischen W10 Mobile-Gerät mehrmals jedes Mal versucht, es wird verweigert.

Warum ist das? Wie kann ich es bekommen?

Danke!

Antwort

3

Sie haben Angenommen bereits Ort im App-Manifest erklärt, werden Sie zu haben führen Sie den Code in den Vordergrund, was bedeutet, es in Ihrem MainPage_Loaded Rückruf funktioniert, aber nicht in den gesperrten Zustand.

Eine erweiterte Ausführung der Standortverfolgung kann ausgeführt werden, solange benötigt wird. Es kann jedoch nur eine solche Sitzung pro Gerät ausgeführt werden. Eine erweiterte Sitzung für die Standortverfolgung kann nur im Vordergrund angefordert werden und die App muss sich im Status "Wird ausgeführt" befinden. Dadurch wird sichergestellt, dass dem Benutzer bekannt ist, dass die App eine erweiterte Standortverfolgungssitzung mit der Nummer initiiert hat.

dies im Hintergrund ausführen zu können, sehen diese -

Es ist immer noch möglich, den Geolocator zu verwenden, während die App unter Verwendung eines Hintergrund Aufgabe oder eine App Dienst im Hintergrund ist, ohne Anforderung einer Standortverfolgung erweiterte Ausführungssitzung.

Sie verwenden LocationTracking erweiterte Ausführung, wenn Sie -

ExtendedExecutionReason.LocationTracking Geben Sie, wenn Sie eine ExtendedExecutionSession wenn Ihre Anwendung benötigt erstellen regelmäßig die Standort aus dem Geolocator loggt sein. Apps für Fitness-Tracking und Navigation , die regelmäßig den Standort des Benutzers überwachen müssen und sollten diesen Grund verwenden.

Hier ist die full article auf diese.

+0

danke für die Antwort.Ich habe den Artikel gelesen, den Sie verlinkt haben, aber das und all die anderen Dinge, die ich gelesen habe, erklären nicht, was Sie getan haben, und wo Sie die Extended Session anfordern können. Ich habe es so verschoben, wie du es vorgeschlagen hast und es hat funktioniert! Es ist jetzt erlaubt. Allerdings, neues Problem, es ist erlaubt, so dass meine StartLocationTrackingAsync-Methode aufgerufen wird und alles ist gut, während es im Vordergrund ist. Wenn ich die App aussetze, funktioniert alles nicht mehr. Ich höre auf, meine OnPositionChanged-Ereignisse vom GeoLocator abzurufen. Wenn ich fortfahre, beginnt es wieder zu arbeiten. Habe ich einen weiteren Installationsschritt verpasst? –

+1

Die erweiterte Ausführungsortverfolgung ist nicht dafür ausgelegt, sie im Hintergrund auszuführen, sondern regelmäßig mit dem Geo-Locator im Vordergrund zu interagieren. Wenn Sie bg ausführen möchten, müssen Sie entweder einen bg-Task oder einen App-Service verwenden. –

+0

Okay, verstanden. Aber kannst du bitte noch eine Frage beantworten? Ich habe den GeoLocation Position Changed Event Handler nicht im Zeitintervall, sondern eher in der Entfernung und auf 100 Meter gesetzt. Ich brauche die Veranstaltung, um das oft anzuheben, weil ich Geofencing benutze. Ich dachte, ich lese, dass Hintergrundaufgaben nur x Minuten auslösen würden, was für mich viel zu lang ist. Ist das wahr? Im Idealfall habe ich einen Event-Handler, der wie ich im Vordergrund anhebt. Mit einem BG verstehe ich, dass ich den Standort abfragen muss. Kann ich es in Sekunden mit einem der Ansätze machen? –

Verwandte Themen