web-dev-qa-db-fra.com

Comment utiliser l'API Android Geofencing?

J'ai testé la nouvelle API du service Google Play Geofencing.

J'ai téléchargé l'exemple de code à partir du site de développeurs Android . Ensuite, j’ai exécuté l’exemple de code sur un appareil Android (Galaxy Note 2)… .. J'ai placé la géo-position et le rayon de mon bureau à 10 m, mais rien ne m’est arrivé à mon bureau.

Lors de l'exécution de l'exemple de code, une chose que j'ai remarquée est que, lorsque je suis déjà dans la plage de geofence et que j'ajoute ensuite la geofence à LocationClient, rien ne se produit.

J'avais déjà lu LocationClient class documentation , et trouvé le paragraphe suivant:

Si le fournisseur d'emplacement réseau est désactivé par l'utilisateur, le service geofence arrête la mise à jour, toutes les clôtures géographiques enregistrées sont supprimées et une intention est générée par l'intention en attente fournie. Dans ce cas, hasError(Intent) renvoie true et getErrorCode(Intent) renvoie GEOFENCE_NOT_AVAILABLE. "

Alors j'ai activé le WiFi et je me dirigeais vers mon bureau (à l'intérieur de la barrière géo), puis j'ai reçu une notification "Geofence entrée".

J'ai les questions suivantes:

  1. Le geofencing fonctionne-t-il uniquement avec le WiFi activé? 

  2. Pourquoi la localisation fournie par mon réseau 3G ne fonctionne-t-elle pas?

  3. Est-ce un bug dans l'exemple de code?

  4. Ou est-ce mon erreur?

21
kylee

Si vous utilisez uniquement un réseau cellulaire, la précision de localisation est inférieure à celle du wi-fi ou du GPS (si vous ouvrez Google Maps, le cercle bleu correspond à une estimation de votre position actuelle. Si vous utilisez uniquement le protocole 3GP, le cercle peut avoir un rayon. de même des centaines de mètres).

Les derniers jours, je travaille sur une application utilisant Geofences et j’ai compris ce qui suit: IMHO, l’entrée de geofence n’est déclenchée que si TOUT ce "cercle d’estimation de localisation" est situé dans le rayon de geofence, c’est-à-dire s'il y a 100% de chances que vous ayez entré la . Cela dépend donc du grand rayon que vous définissez. Si vous définissez seulement 10 mètres, cela ne fonctionnera probablement qu'avec le GPS, jamais avec le 3GP. Pour le 3GP, vous devrez définir un rayon de 1000 mètres.

5

Je pensais partager mes résultats ici. J'ai également développé une application de laboratoire qui implémente les API de localisation des services Google Play et Geofence. Mes résultats montrent que le code de détermination de la localisation présente une sorte d'incapacité pathologique d'admettre ses erreurs. :)

Lorsqu'on appuie sur un bouton, mon application crée une barrière géographique à l'emplacement actuel ("curLoc") renvoyée par l'API d'emplacement avec un rayon de 30 mètres. Sur l'écran, j'affiche la distance jusqu'au centre de la barrière ("distToCenter") en appelant curLoc.distanceTo (fenceLoc) et en la mettant à jour toutes les secondes environ.

Je lance l'application et attends que la précision se stabilise (normalement à 10,0 mètres), puis appuie sur le bouton pour créer la clôture. Je reçois l'événement "entrer" immédiatement. J'efface l'événement et vais faire une promenade et j'entre apparemment dans une anomalie spatio-temporelle. Je marche dans le bloc et au coin, et la valeur de distToCenter n’a augmenté que d’environ 4 mètres. Je vais plus loin jusqu'à ce que je sois à environ 300 mètres de chez moi (à en juger par le nombre de pas) et que dstToCenter augmente progressivement. L'événement de sortie de barrière virtuelle se déclenche finalement environ 20 secondes APRÈS que le dstToCenter dépasse 30 mètres. 

J'attends de voir où la distance se stabilise et cela fait environ 150 mètres. Je me retourne et rentre chez moi et le même décalage de position extrême se produit. Je m'assieds à mon bureau alors que mon trou de ver est encore à environ 90 mètres. Après environ 40 secondes, mon fils parvient à l’intérieur de la clôture et au bout de 20 secondes environ, je reçois l’épreuve d’entrée. 

À ce stade, je suis toujours quelque part sur le trottoir avant (à 7,4 mètres), me dirigeant lentement vers la porte d'entrée.

REMARQUE: La source a été "fusionnée" pendant tout le processus, bien que l'icône de la barre d'état GPS s'allume et clignote quelques secondes après la perte de connexion à mon réseau WiFi. De plus, la précision n'a jamais baissé à partir de 10,0 mètres. 

MENTEURS!

:)

1
William T. Mallard

dans le cas où le réseau est en condition, vous devez augmenter le rayon d'au moins 1 000 M, car utiliser un fournisseur de réseau pour extraire la position actuelle permet de localiser à également).

1
RAHULRSANNIDHI

Le Wifi est utilisé pour vous aider à suivre votre position. L’utilisation de signaux Wi-Fi et de signaux de cellules pour trianguler votre position est une solution plus économe en énergie que d’utiliser votre GPS en permanence. De plus, cela fonctionne dans des situations où le GPS ne serait pas comme dans les zones à trajets multiples et à l’intérieur.

1
Njall

J'ai testé un exemple d'application Geofence, et si le WiFi est désactivé, il ne détecte pas les événements geofence sur les versions inférieures à Android 4.3.

Android 4.3 et supérieur fonctionne même si le WiFi est désactivé.

0
Prakash