2017-06-07 3 views
1

J'essaie d'utiliser Extended Execution sur mon application Windows 10 UWP à des fins de localisation. Il y a beaucoup d'exemples de ceci en ligne. J'utilise essentiellement ce bloc de code commun.L'exécution étendue de Windows 10 Mobile App continue à être refusée

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

Ce bloc de code est exécuté dans le gestionnaire d'événements Suspending pour mon application, comme ceci:

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. 
} 

La première question que j'avais été, je ne pouvais pas cet événement à même le feu, mais je lis sur SO que VS ne suspendra pas votre application pendant le débogage. Donc, je l'ai forcé à suspendre en utilisant les événements Lifecycle dans VS. Maintenant, je reçois l'événement Suspending à chaque fois, ce qui est bien. Cependant, lorsque je demande la session d'exécution étendue, elle est refusée à chaque fois. J'ai essayé sur l'émulateur et sur mon appareil physique W10 mobile, plusieurs fois à chaque fois, il est refusé.

Pourquoi est-ce? Comment puis-je l'obtenir pour être autorisé?

Merci!

Répondre

3

En supposant que vous avez déjà déclaré Emplacement dans le manifeste de l'application, vous devrez exécuter le code au premier plan, ce qui signifie qu'il fonctionnera dans votre rappel MainPage_Loaded mais pas à l'état suspendu.

Une session d'exécution étendue de suivi de localisation peut s'exécuter aussi longtemps que nécessaire. Toutefois, il ne peut y avoir qu'une telle session s'exécutant par périphérique . Une session d'exécution étendue de suivi de localisation ne peut être que demandée au premier plan et l'application doit être à l'état En cours. Cela garantit que l'utilisateur est conscient que l'application a lancé une session de suivi de l'emplacement étendu .

Pour exécuter ce en arrière-plan, voir ce -

Il est encore possible d'utiliser le géolocalisateur lorsque l'application est en arrière-plan à l'aide d'une tâche de fond , ou un service d'application, sans demander un suivi de localisation session d'exécution étendue.

Vous utilisez LocationTracking exécution prolongée lorsque vous -

ExtendedExecutionReason.LocationTracking Spécifiez lorsque vous créez un ExtendedExecutionSession si votre application doit se connecter régulièrement l'emplacement du géolocalisateur. Applications pour le suivi de la condition physique et de la navigation qui ont besoin de surveiller régulièrement l'emplacement de l'utilisateur et devraient utiliser cette raison.

Voici le full article à ce sujet.

+0

merci pour la réponse.J'avais lu l'article auquel vous avez donné un lien, mais celui-ci et tous les autres documents que je lis n'expliquent pas ce que vous avez fait, à savoir où demander la session étendue. Je l'ai déplacé comme vous l'avez suggéré et ça a marché! C'est maintenant autorisé. Cependant, nouveau problème, il est autorisé ainsi ma méthode StartLocationTrackingAsync est appelée et tout est bon quand il est au premier plan. Cependant, quand je suspends l'application, tout s'arrête de fonctionner. J'arrête d'obtenir mes événements OnPositionChanged du GeoLocator. Quand je reprends, ça recommence à fonctionner. Ai-je manqué une autre étape dans la configuration? –

+1

Le suivi de l'emplacement d'exécution étendue n'est pas conçu pour l'exécuter en arrière-plan, mais interagit régulièrement avec le localisateur géographique au premier plan. Si vous voulez une exécution bg, vous devrez utiliser une tâche bg ou un service d'application. –

+0

D'accord, compris. Mais pouvez-vous s'il vous plaît répondre à une autre question? J'ai le géolocuteur positionné Evénement élévateur soulevant pas sur l'intervalle de temps, mais plutôt sur la distance et il est fixé à 100 mètres. J'ai besoin de l'événement pour soulever ceci souvent parce que j'emploie l'escrime de geo. Je pensais avoir lu que les tâches de fond ne feraient que x nombre de minutes, ce qui est beaucoup trop long pour moi. Est-ce vrai? Idéalement, j'ai un gestionnaire d'événements qui soulève comme je le fais au premier plan. Avec un bg, je comprends que je vais devoir interroger l'emplacement. Puis-je le faire en quelques secondes avec l'une des approches? –