Windows Phone 8.1 suivi de localisation
Je veux réaliser une Application qui ne cesse de envoyez l'appareil à un service web. La recherche dans la documentation, j'ai trouvé la Géolocalisation de classe et de certains articles où de suivi de position est abordé:
- Comment suivre constamment l'emplacement du téléphone pour Windows Phone 8
- Comment faire pour exécuter de suivi de localisation des applications en arrière-plan pour Windows Phone 8
La mise en œuvre de deux projets d'exemples discutés dans ces articles, j'ai remarqué que le geolocator_PositionChanged() de l'événement n'est pas déclenché à chaque mise à jour de position. Il y a un délai (environ 10/15 minutes) entre 2 exécution de l'événement. La chose étrange est que cela se produit même lorsque l'Application s'exécute en arrière plan (pas seulement en arrière-plan). Je suis à l'aide d'émulateur Windows Phone.
Dans mon Application j'ai un contrôle de la carte où j'ai besoin de montrer la position de l'utilisateur et, donc, j'ai besoin que l'geolocator_PositionChanged() cas être correctement tiré pour chaque mise à jour de position, sans retards.
1) Comment puis-je suivre (sans retard) la position de l'appareil à l'aide de Geolocator classe?
De la recherche sur le réseau, j'ai trouvé le GeoCoordinateWatcher classe, qui fournit continuellement de suivi de position de l'appareil. C'est le code:
public MainPage()
{
InitializeComponent();
this.GetCoordinate();
}
private void GetCoordinate()
{
var watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High)
{
MovementThreshold = 1
};
watcher.PositionChanged += this.watcher_PositionChanged;
watcher.Start();
}
private void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
//Get position data
var pos = e.Position.Location;
//Update mypos object
mypos.update(pos.Latitude, pos.Longitude);
//Update data on the main interface
MainMap.SetView(mypos.getCoordinate(), MainMap.ZoomLevel, MapAnimationKind.Parabolic);
}
Cela fonctionne: watcher_PositionChanged() l'événement est déclenché, sans retards.
2) Pourquoi le GeoCoordinateWatcher n'a pas de retards? Quelle est la différence entre GeoCoordinateWatcher classe et Geolocator classe?
Enfin, l'Application doit envoyer la position du dispositif pour le web service, même quand il n'est pas actif. Donc, j'ai besoin d'une tâche en arrière-plan. Comme l'a proposé ici par Romasz, je peux utiliser Geolocator classe avec certaines limitations.
3) puis-je utiliser GeoCoordinateWhatcher dans le fond? Si oui, comment?
Mon objectif est de réaliser un suivi de position Application sans retard, qui fonctionne même en arrière-plan. Quelle est la meilleure façon de le faire? L'Application doit suivre la position de l'appareil et mettre à jour en permanence le service web (même si dans le fond). Comment puis-je faire cela? Quelle est la meilleure approche? Je sais que sur les Applications Windows Phone cycle de vie et je peux accepter certaines limitations pour l'exécution en arrière-plan. Ce sont l'arrière-plan des limites?
OriginalL'auteur smn.tino | 2014-06-30
Vous devez vous connecter pour publier un commentaire.
Malheureusement, Windows Phone 8.1 ne prend pas en charge le suivi continu en arrière-plan. Si vous souhaitez cette fonctionnalité, vous devrez développer une application Windows Phone 8 à la place. Espérons qu'ils vont corriger cela pour 8.2, 9 ou que ce soit du côté!
Je n'ai fait de la recherche de liens pour la sauvegarde de ma déclaration lorsque j'ai posté cette réponse, mais ne pouvais pas trouver quelque chose de concis. On m'a donné cette info à un Windows Phone 8.1 Kickstart Événement organisé par Hannes Nel en avril 2014. Il n'a fournir pratique diapositives montrant ce que l'API est là et n'étaient pas disponibles dans les divers 8 et 8.1 saveurs de projets Windows Phone. La raison, je me souviens de ce fait si bien, c'est parce que j'ai gagné un Lumia 820 pour répondre à une question demandant ce qui a été possible qu'avec Windows Phone 8 de l'API et non 8.1 de l'API. J'ai été déçu que je ne peux pas mettre à jour mon application à 8,1 à cause de cela.
C'est indiqué ici: msdn.microsoft.com/en-us/library/windowsphone/develop/... > Continue exécution en arrière-plan n'est pas pris en charge pour Silverlight 8.1 apps
J'ai aussi trouvé le Silverlight 8.1 info, mais il ne couvre pas l'Application Universelle du côté de Windows Phone 8.1, donc j'ai continué à regarder.
Je suis entré en contact avec Hannes Nel. Il me dit qu'il proviennent ses diapositives à partir de ce cours gratuit en ligne - microsoftvirtualacademy.com/training-courses/... - diapositive 58 de la section "01 | Introduction de Windows Phone 8.1 Développement d'une Application..." états "Fonctions Disponibles Uniquement sur Plate-forme de Silverlight" "fond Continu de suivi et de localisation (SL 8.0 seulement)". Juste pour clarifier - vous pouvez toujours faire de fond de suivi sur WP8.1, il vous suffit de créer votre application WP8 projet en ce sens (malheureusement!).
OriginalL'auteur Gavin
Il y a une façon vous pouvez obtenir un suivi de position, mais il a ses limites. Il ne sera pas suffisant pour une application sportive, mais pour de nombreux autres cas d'utilisation, il fit. Utilisation
Geofence
et unBackgroundTask
avecLocationTrigger
Voici un exemple:
Cela va ajouter une zone de gardiennage virtuel cercle avec le centre de votre position et un rayon de 25 mètres. Lorsque vous quittez cette zone spécifiée de la tâche en arrière-plan est déclenché. Assurez-vous de mettre à jour la zone de gardiennage virtuel à votre nouveau poste et vous serez informé lorsque l'utilisateur se déplace de plus de 25 mètres.
Mais gardez à l'esprit que la
BackgroundTask
ne doivent pas courir dès que vous quittez les limites de la clôture. Il pourrait y avoir un retard de quelques minutes (je n'ai jamais remarqué un retard de plus d'une minute après que j'ai quitté le cercle). Comme je l'ai dit: pas assez pour une application sportive, mais il peut s'adapte à vos besoins.Pour de plus amples informations, regardez ici:
http://msdn.microsoft.com/en-us/library/windows.devices.geolocation.geofencing.aspx
Pour un exemple de projet coup d'oeil ici:
https://code.msdn.microsoft.com/windowsapps/Geofencing-and-geolocation-d7ea0ef8
Remarques:
J'ai lu qu'il est fortement recommandé de ne pas utiliser un rayon de moins de 50. Mais dans mes tests, 25 bien travaillé, afin de mieux vous vérifiez que vous-même ainsi.
ainsi l'exemple de code est affiché ci-dessus. Ce qui vous manque?
est-il possible de l'envoyer à l'emplacement d'azure mobile service au sein de cette tâche en arrière-plan
En fait, je dois envoyer mon emplacement d'azur backend dont le siège est en tâche de fond. C'est pas de service mobile, mais je ne vois pas pourquoi cela ne devrait pas fonctionner comme prévu.
Comment avez-vous fait "envoyer l'emplacement d'azur backend avec le régime enregistré d'tâche de fond". J'ai commencé une question ici [stackoverflow.com/questions/34831107/...
OriginalL'auteur christoph
J'ai fait exactement la même chose que @christoph... j'ai juste ajouté l'Entrée de l'événement ainsi... Mes mises à jour se produit toutes les 2 minutes, TOUJOURS.
OriginalL'auteur 130nk3r5