2

J'ai un problème dans l'exactitude des geofences parce que l'emplacement de l'utilisateur est principalement déterminé par les réseaux mobiles qui craint complètement. Mon application utilise des geofences autour des endroits sélectionnés qui vont effectuer une action lorsque l'utilisateur entre ces endroits ... Je confirme que mon application fonctionne réellement parce que lorsque j'ouvre google maps l'exactitude de l'emplacement augmente et puis mon geofence est déclenché.Comment rendre les géofences précises?

Ma solution actuelle utilise le gestionnaire de position avec le fournisseur GPS qui obtient l'emplacement toutes les minutes, mais il semble affecter la vie de la batterie et il s'arrête après un certain temps.

Ma question est la suivante: existe-t-il un moyen de rendre les géofences précises à un rayon de 60 m par exemple? Ou est-il possible d'obtenir des mises à jour précises de l'emplacement de l'utilisateur?

Merci à l'avance

+1

Vous pouvez utiliser les données GSM et GPS ensemble pour stimuler votre emplacement des performances de détection. Un bon exemple de détection de localisation par GPS peut être trouvé ici, http://stackoverflow.com/questions/6181704/good-way-of-getting-the-users-location-in-android –

+0

Merci mais mon application nécessite des geofences être déclenché instantanément. Je n'ai pas besoin d'obtenir l'emplacement toutes les 30 minutes – Dev

+0

'est-il un moyen de rendre les géofences précises à 60 mO'. La question est fausse car elle dépend uniquement de la précision du fournisseur de localisation. Les puces GPS dans les smartphones ne sont pas très bonnes. Mais 60 mètres est mauvais. De nombreux téléphones feront 15 m ou moins. – greenapps

Répondre

2

Vous aurez une meilleure idée de la précision en suivant ce fil:

How to make Geo Fencing alert more accurate in Android

Une fois que vous créez votre geofence, vous pouvez commencer à faire un ping de votre GPS jusqu'à ce que vous obtiendrez ENTRER transition. J'ai essayé de cette façon et j'ai eu une meilleure précision.

simple service de faire un ping GPS:

public class GPSService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener { 

GoogleApiClient mGoogleApiClient; 
LocationRequest locationRequest; 

public GPSService() { 
} 

@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    throw new UnsupportedOperationException("Not yet implemented"); 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 


    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .addApi(LocationServices.API) 
      .addConnectionCallbacks(this) 
      .addOnConnectionFailedListener(this) 
      .build(); 

    mGoogleApiClient.connect(); 


} 

@Override 
public void onLocationChanged(Location location) { 


    Utility.ReadAndWriteData(this, Utility.readFileName(this), "Still Geofence is not triggered!!!"); 

} 

@Override 
public void onConnected(Bundle bundle) { 

    locationRequest = LocationRequest.create(); 
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    locationRequest.setFastestInterval(1000); 
    locationRequest.setInterval(2000); 
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this); 

} 

@Override 
public void onConnectionFailed(ConnectionResult connectionResult) { 

} 

@Override 
public void onConnectionSuspended(int i) { 

} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 

    if(mGoogleApiClient.isConnected()) { 

     LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this); 

    } 
} 
+0

Mon application fonctionne toujours en arrière-plan, donc je pense que l'interrogation GPS affecte toujours la vie de la batterie comme je l'ai décrit ci-dessus ... J'ai besoin de savoir comment faire un ping du GPS exactement, dois-je le faire? Quelle min heure et quelle distance minimale dois-je définir? – Dev

+0

@Dev: En fait, vous devez lancer un ping sur le GPS jusqu'à ce que votre geofence actuelle se déclenche avec la transition ENTER. Donc, quand vous allez écrire du code pour créer des geofences après l'avoir créé, vous commencerez à envoyer une requête ping à votre GPS. Une fois que vous obtiendrez la transition ENTRÉE, vous devez arrêter de cingler. C'est tout. Comme vous l'avez mentionné, 60M rayon est très inférieur en cas de geofence, donc si vous pouvez augmenter le faire au moins 500 M, donc vous aurez un meilleur résultat car moins de rayon il était incapable de suivre transiiton – Jai

+0

@Dev: Ajout de service simple call above – Jai