Cette section décrit quelques scénarios typiques de collecte de données de localisation, ainsi que des recommandations pour une utilisation optimale de l'API de géorepérage et de l'API Fused Location Provider.
Mises à jour au premier plan ou visibles par l'utilisateur
Exemple : une application de cartographie qui nécessite des mises à jour fréquentes et précises avec une latence très faible. Toutes les mises à jour sont effectuées au premier plan : l'utilisateur démarre une activité, consomme des données de localisation, puis arrête l'activité après un court laps de temps.
Utilisez la méthode setPriority()
avec la valeur PRIORITY_HIGH_ACCURACY
ou PRIORITY_BALANCED_POWER_ACCURACY
.
L'intervalle spécifié dans la méthode setInterval()
dépend du cas d'utilisation: pour les scénarios en temps réel, définissez la valeur sur quelques secondes. Sinon, limitez-vous à quelques minutes (nous vous recommandons de choisir au moins deux minutes pour réduire l'utilisation de la batterie).
Connaître la position de l'appareil
Exemple: une application météo a besoin de connaître la position de l'appareil.
Utilisez la méthode getLastLocation()
, qui renvoie la position la plus récente disponible (qui peut être nulle dans de rares cas). Cette méthode permet d'obtenir facilement un emplacement et qui, contrairement au fait de demander de manière active des mises à jour de la position, n'entraîne pas de frais associés. Utilisez-la avec la méthode isLocationAvailable()
, qui renvoie true
lorsque la position renvoyée par getLastLocation()
est raisonnablement à jour.
Lancer des mises à jour lorsqu'un utilisateur se trouve à un emplacement spécifique
Exemple: demander des mises à jour lorsqu'un utilisateur se trouve à une certaine distance de son lieu de travail, de son domicile ou d'un autre lieu.
Utilisez le géorepérage conjointement avec les mises à jour Fused Location Provider. Demandez des mises à jour lorsque l'application reçoit un déclencheur d'entrée dans une zone de géorepérage, et supprimez les mises à jour lorsque l'application reçoit un déclencheur de sortie d'une zone de géorepérage. Cela garantit que l'application ne reçoit des mises à jour de position plus précises que lorsque l'utilisateur est entré dans une zone définie.
Pour ce scénario, le workflow typique peut consister à afficher une notification lors de la transition d'entrée dans la zone de géorepérage, et à lancer une activité contenant du code permettant de demander des mises à jour lorsque l'utilisateur appuie sur la notification.
Lancer des mises à jour en fonction de l'état de l'activité de l'utilisateur
Exemple: demander des mises à jour uniquement lorsque l'utilisateur est à vélo ou en voiture.
Utilisez l'API Activity Recognition conjointement avec les mises à jour Fused Location Provider. Demandez des mises à jour lorsque l'activité ciblée est détectée, et supprimez les mises à jour lorsque l'utilisateur cesse d'effectuer cette activité.
Pour ce cas d'utilisation, le workflow typique peut consister à afficher une notification pour l'activité détectée et à lancer une activité contenant du code permettant de demander des mises à jour lorsque l'utilisateur appuie sur la notification.
Mises à jour de position en arrière-plan de longue durée associées à des zones géographiques
Exemple: l'utilisateur souhaite être averti lorsque l'appareil se trouve à proximité d'un revendeur.
Il s'agit d'un excellent cas d'utilisation pour le géorepérage. Comme le cas d'utilisation implique presque certainement la localisation en arrière-plan, utilisez la méthode addGeofences(GeofencingRequest, PendingIntent)
.
Vous devez définir les options de configuration suivantes :
Si vous suivez les transitions pendant lesquelles l'utilisateur reste dans la zone de géorepérage, utilisez la méthode
setLoiteringDelay()
en transmettant une valeur d'environ cinq minutes ou moins.Utilisez
setNotificationResponsiveness()
en transmettant une valeur d'environ cinq minutes. Toutefois, envisagez d'utiliser une valeur d'environ 10 minutes si votre application peut gérer le délai supplémentaire de réactivité.
Une application ne peut enregistrer simultanément qu'un maximum de 100 zones de géorepérage. Dans le cas où une application souhaite effectuer le suivi d'un grand nombre de revendeurs, il peut être utile que l'application enregistre une grande zone de géorepérage (au niveau de la ville), puis qu'elle enregistre de manière dynamique des zones de géorepérage plus petites (pour les lieux situés dans la ville) pour les magasins dans la zone de géorepérage plus étendue. Lorsque l'utilisateur entre dans une grande zone de géorepérage, ajoutez des zones de géorepérage plus petites. Lorsque l'utilisateur quitte la zone de géorepérage de plus grande taille, supprimez les petites zones de géorepérage et enregistrez-les à nouveau pour une nouvelle zone.
Mises à jour de position en arrière-plan de longue durée sans composant d'application visible
Exemple : une application qui suit la position de l'utilisateur de manière passive
Si possible, utilisez la méthode setPriority()
avec l'option PRIORITY_NO_POWER
, car elle ne consomme presque pas de batterie. Si l'utilisation de PRIORITY_NO_POWER
n'est pas possible, utilisez PRIORITY_BALANCED_POWER_ACCURACY
ou PRIORITY_LOW_POWER
, mais évitez d'utiliser PRIORITY_HIGH_ACCURACY
pour les tâches prolongées en arrière-plan, car cette option décharge considérablement la batterie.
Si vous avez besoin de plus de données de localisation, utilisez un emplacement passif en appelant la méthode setFastestInterval()
et en transmettant une valeur inférieure à celle que vous transmettez à setInterval()
. Lorsqu'elle est combinée à l'option PRIORITY_NO_POWER
, la localisation passive peut fournir l'emplacement calculé par d'autres applications avec opportunisme, sans frais supplémentaires.
Modérez la fréquence en ajoutant une latence à l'aide de la méthode setMaxWaitTime()
. Par exemple, si vous utilisez la méthode setinterval()
avec une valeur d'environ 10 minutes, vous devez appeler setMaxWaitTime()
avec une valeur comprise entre 30 et 60 minutes. Avec ces options, la localisation est calculée pour votre application toutes les 10 minutes environ. Toutefois, celle-ci n'est activée que toutes les 30 à 60 minutes avec des données de localisation disponibles sous forme de mise à jour par lot. Cette approche accepte plus de latence au profit d'une plus grande quantité de données disponible et de meilleures performances de la batterie.
Mises à jour fréquentes et très précises lorsque l'utilisateur interagit avec d'autres applications
Exemple: une application de navigation ou de fitness continue de fonctionner lorsque l'utilisateur éteint l'écran ou ouvre une autre application.
Utilisez un service de premier plan. Si votre application est susceptible d'effectuer un travail coûteux pour le compte de l'utilisateur, nous vous recommandons d'en informer l'utilisateur. Un service de premier plan nécessite une notification persistante. Pour en savoir plus, consultez la page Présentation des notifications.