Je travaille sur des applications de géolocalisation sous Android. Voici l'architecture de mon code :
- BackgroundSyncService : Une classe de service qui est utilisée pour obtenir la mise à jour de la localisation. Ici, GoogleApiClient est initialisé et implémente d'autres méthodes liées à la localisation.
-
AppRunCheckerReceiver : Une classe BroadcastReceiver qui va vérifier si mon
BackgroundSyncService
est en marche ou non dans un intervalle de temps. S'il s'est arrêté, il démarre. -
GpsEnableReceiver : Un BroadcastReceiver qui se déclenchera si le statut du GPS a changé. Il vérifiera si mon
BackgroundSyncService
est en cours ou non dans un intervalle de temps. S'il s'est arrêté, il démarre. -
InternetConnectionStateReceiver : Un BroadcastReceiver qui se déclenche lorsque l'état d'Internet change. Il vérifiera si mon
BackgroundSyncService
est en cours d'exécution ou non dans un intervalle de temps. S'il est arrêté, il démarre.
Dans mon BackgroundSyncService
j'initialise le GoogleApiClient de cette façon :
public void setLocationLocationRequest() {
try {
googleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this)
.addOnConnectionFailedListener(this).addApi(com.google.android.gms.location.LocationServices.API).build();
locationRequest = new LocationRequest();
locationRequest.setInterval(3000);
locationRequest.setFastestInterval(3000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
googleApiClient.connect();
} catch (Exception e) {
}
Ici, la précision est LocationRequest.PRIORITY_HIGH_ACCURACY
et l'intervalle est
locationRequest.setInterval(3000)
ici est le code de mise en œuvre de GoogleApiClient.
Ce site application Infos GPS La section contient les paramètres Latitude, Longitude et Précision.
Mes conclusions : en onLocationChanged(Location location)
Je vérifie la précision de l'objet Location de cette manière : location.getAccuracy()
. Ici, si la précision est inférieure à 50 mètres, alors je l'accepte.
Dans 85% des cas, cela fonctionne comme un charme. Il m'envoie la position exacte du GPS. Mais dans 15% des cas, il m'envoie une localisation imprécise comme plus de >300 mètres.
Les 15% d'appareils sont des mobiles de marque chinoise à bas prix.
Mes questions :
- Comment puis-je obtenir un niveau de précision proche de 99%. Y a-t-il un problème dans l'architecture de mon code ?
- La précision du GPS dépend-elle de la configuration de l'appareil ? Si OUI, que puis-je faire pour un appareil à faible configuration ?
- Comment les applications de covoiturage Uber, Go-JEK etc. fonctionnent-elles sur tous les appareils ? Ont-ils un codage supplémentaire pour le GPS seulement ?
- Ma demande concerne le Bangladesh. Ici, l'Internet est lent. Cela a-t-il un impact négatif sur la précision du GPS ?
Merci d'avance pour ce fil de discussion. Et aussi désolé pour le mauvais anglais.
2 votes
Avez-vous essayé avec
FusedLocationProviderAPI
?0 votes
Merci @Piyush, je l'ai utilisé mais aucune amélioration.
0 votes
Lorsque vous dites qu'il fonctionne correctement dans 85 % des cas, voulez-vous dire 85 % des emplacements que vous obtenez ou 85 % des appareils ? En ce qui concerne la question 4, la vitesse d'Internet n'a rien à voir avec le GPS. Il s'agit de deux systèmes différents.
1 votes
La question que vous posez est bonne, mais je doute qu'un développeur remette en marche tout le travail qu'il a fait pour réaliser cette chose pour faire votre application, alors bien sûr, il n'y a pas de concurrence Oui, la précision du GPS a une relation avec l'appareil, vérifiez la section Réseau sur les spécifications d'un appareil, vous pouvez avoir une idée des systèmes de satellites qu'ils utilisent pour obtenir le GPS. stackoverflow.com/questions/3145089/
0 votes
Ils n'ont rien de spécial, juste developer.Android.com/training/location/retrieve-current.html