2010-01-01 4 views
1

Je voudrais échantillonner mon emplacement GPS périodiquement, disons, toutes les 10 minutes. Je suppose que la meilleure façon de le faire serait d'utiliser la classe LocationManager avec la méthode:Android: Puis-je utiliser un récepteur de diffusion pour l'échantillonnage de localisation GPS périodique sans exécuter de service?

public void requestLocationUpdates (String provider, long minTime, float minDistance, PendingIntent intent) 

Cela diffuserait l'intention précisé que je pouvais alors recevoir dans un récepteur de radiodiffusion dans ma demande. Ma question est, si j'appelle cette méthode d'une activité, les diffusions arrêteront-elles quand le processus qui a appelé le requestLocationUpdate() est tué, ou cet enregistrement restera-t-il actif pour que je puisse continuer à obtenir des mises à jour de localisation? Dois-je laisser un service s'exécuter pour pouvoir conserver les mises à jour de localisation lorsqu'un utilisateur passe à différentes applications? Merci!

Répondre

6

Fondamentalement ce que vous avez dit est correct, autant que je sache.

Je pense que l'enregistrement devrait rester actif même si le Activity meurt depuis que vous avez fourni un PendingIntent au LocationManager. Il n'y a aucune dépendance sur votre tâche en vie — le PendingIntent contient toutes les informations dont le framework a besoin.

De the docs:

même si son processus d'application propriétaire est tué, le PendingIntent lui-même restera utilisable à partir d'autres processus qui ont été donné

Il devrait être assez simple pour tester cela de toute façon. Commencez simplement les mises à jour de votre activité ou de votre service, puis allez dans le shell et tuez votre application pour voir si l'icône de la barre d'outils GPS reste et vous recevrez votre Intent comme prévu. En ce qui concerne l'exécution d'un Service en cours d'exécution, cela doit être évité. Votre PendingIntent peut démarrer le service pour vous, en le laissant gérer l'emplacement entrant Intent, faire le traitement dont il dispose, puis s'arrêter lui-même (Service.stopSelf()). Il sera redémarré lorsque le prochain Intent sera déclenché par le LocationManager.

Assurez-vous de vous désinscrire de la réception des mises à jour de localisation à un moment donné!

Questions connexes