Existe-t-il un moyen de détecter très rapidement le nouvel emplacement en utilisant le fournisseur GPS?Fournisseur GPS et ses performances
Répondre
Le GPS est souvent lent - c'est comme ça. Mais il y a plusieurs choses que vous pouvez faire afin d'accélérer l'expérience pour l'utilisateur:
Commencez à chercher un endroit dès que l'application démarre - ne pas attendre jusqu'à ce qu'ils arrivent à une activité qui a besoin un emplacement
Utilisez le fournisseur de réseau, ce qui est souvent beaucoup plus rapide
Utilisez le fournisseur passif. Utiliser les informations de localisation acquises par d'autres applications sur l'appareil
Utilisez le dernier emplacement connu - il est stocké pendant un certain temps, et s'il existe, il vous donne un emplacement instantanément (même s'il est peut-être un peu ancien)
Si approprié dans votre contexte d'application, stocker un emplacement vous dans prefs
Cet article de Reto Meier de Google est un excellent endroit pour commencer - regarder les liens connexes pour des exemples de code et plus en détail http://blog.radioactiveyak.com/2011/06/how-to-build-location-based-apps-that.html
thnks olie c mais je pense que le fournisseur de réseau n'est pas plus précis que le fournisseur GPS. Et comment puis-je utiliser l'emplacement lastKnown pour détecter un nouvel emplacement? – Dev
Regardez sous "Obtenir une solution rapide avec le dernier emplacement connu" sur cette page. C'est facile http://developer.android.com/guide/topics/location/obtaining-user-location.html –
U peut récupérer l'emplacement via le fournisseur de réseau et le fournisseur GPS.
Vous pouvez vérifier simultanément les deux fournisseurs si vous souhaitez une récupération rapide de l'emplacement. Voici le code ..
Créer une classe comme cette première:
import android.content.Context;
import android.content.Intent;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.Handler;
import android.provider.Settings;
import android.util.Log;
import android.widget.Toast;
import com.tcs.android.eventinfo.data.DataStore;
public class GeoFence {
// public Timer timer1;
LocationManager lm;
LocationResult locationResult;
boolean gps_enabled=false;
boolean network_enabled=false;
Context mContext;
public Handler handler;
public GetLastLocation r;
public boolean isLocationNullSecondTime=false;
public GeoFence(Context context) {
mContext=context;
handler = new Handler();
chekStatusOfLocationProvider(isLocationNullSecondTime);
}
public void chekStatusOfLocationProvider(boolean isLocationNullSecondTime){
if(lm==null)
lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
Log.i("GPS"," GPS"+lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER));
Log.i("GPS"," Network"+lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER));
Log.i("GPS"," Passive"+lm.isProviderEnabled(LocationManager.PASSIVE_PROVIDER));
if ((!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)
&& !lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
|| isLocationNullSecondTime) {
Log.i("GPS", "Inside Constructor");
Toast.makeText(mContext, "Turn on your Location provider",
Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(myIntent);
}
}
public boolean getLocation(LocationResult result)
{
Log.i("GEo fence","DataStore.IS_THREAD_RUNNING : "+DataStore.IS_THREAD_RUNNING);
if(!DataStore.IS_THREAD_RUNNING) {
/* if ((!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)
&& !lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
|| isLocationNullSecondTime) {
Log.i("GPS", "Inside Constructor");
Toast.makeText(mContext, "Turn on your Location provider",
Toast.LENGTH_LONG).show();
Intent myIntent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
mContext.startActivity(myIntent);
}*/
Log.i("GPS","inside getlocation");
//I use LocationResult callback class to pass location value from MyLocation to user code.
locationResult=result;
//exceptions will be thrown if provider is not permitted.
try{gps_enabled=lm.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){}
try{network_enabled=lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){}
//don't start listeners if no provider is enabled
if(!gps_enabled && !network_enabled){
Log.i("GPS","nothing is enable");
return false;
}
if(gps_enabled){
Log.i("GPS","inside getlocation Gps is enabled");
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 5000, locationListenerGps);
}
if(network_enabled){
Log.i("GPS","inside getlocation netwok is enable");
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,0, 5000, locationListenerNetwork);
}
r=new GetLastLocation();
handler.postDelayed(r,20000);
return true;
}
else {
return false;
}}
LocationListener locationListenerGps = new LocationListener() {
public void onLocationChanged(Location location) {
DataStore.IS_THREAD_RUNNING=true;
Log.i("GPS","inside onLocationcahnged of gps");
isLocationNullSecondTime=false;
lm.removeUpdates(this);
lm.removeUpdates(locationListenerNetwork);
handler.removeCallbacks(r);
locationResult.gotLocation(location);
}
public void onProviderDisabled(String provider) { Log.i("GPS","inside onProviderDisabled of gps");}
public void onProviderEnabled(String provider) { Log.i("GPS","inside onProviderEnabled of gps");}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
LocationListener locationListenerNetwork = new LocationListener() {
public void onLocationChanged(Location location) {
DataStore.IS_THREAD_RUNNING=true;
Log.i("GPS","inside onLocationcahnged of Network");
isLocationNullSecondTime=false;
lm.removeUpdates(this);
lm.removeUpdates(locationListenerGps);
handler.removeCallbacks(r);
locationResult.gotLocation(location);
}
public void onProviderDisabled(String provider) {Log.i("GPS","inside onProviderDisabled of Network");}
public void onProviderEnabled(String provider) {Log.i("GPS","inside onProviderEnabled of Network");}
public void onStatusChanged(String provider, int status, Bundle extras) {}
};
class GetLastLocation implements Runnable {
@Override
public void run() {
DataStore.IS_THREAD_RUNNING=true;
Log.i("GPS","inside the thread run");
lm.removeUpdates(locationListenerGps);
lm.removeUpdates(locationListenerNetwork);
Location net_loc=null, gps_loc=null;
if(gps_enabled){
gps_loc=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Log.i("GPS","gps location object :"+gps_loc);
}
if(network_enabled){
net_loc=lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Log.i("GPS","neteork object :"+ net_loc);
}
//if there are both values use the latest one
if(gps_loc!=null && net_loc!=null){
handler.removeCallbacks(r);
isLocationNullSecondTime=false;
Log.i("GPS","neteork object not null :"+ net_loc);
Log.i("GPS","GPS object not null :"+ gps_loc);
if(gps_loc.getTime()>net_loc.getTime())
locationResult.gotLocation(gps_loc);
else
locationResult.gotLocation(net_loc);
return;
}else{
handler.removeCallbacks(r);
if(gps_loc!=null){
isLocationNullSecondTime=false;
locationResult.gotLocation(gps_loc);
return;
}
else if(net_loc!=null){
isLocationNullSecondTime=false;
locationResult.gotLocation(net_loc);
return;
}
else{
isLocationNullSecondTime=true;
Log.i("GPS","Both the object is null and asking for turn on the Location provider :");
locationResult.gotLocation(null);
return;
}
}
//locationResult.gotLocation(null);
}
}
public static abstract class LocationResult{
public abstract void gotLocation(Location location);
}
puis dans votre activité écrire le code ou implémenter la méthode gotLocation (emplacement d'emplacement) comme ceci:
public LocationResult locationResult = new LocationResult() {
@Override
public void gotLocation(final Location location) {
// do something
mLocation = location;
if (geoFence.handler != null) {
geoFence.handler.removeCallbacks(geoFence.r);
}
if (location == null) {
if (DataStore.IS_THREAD_RUNNING) {
DataStore.IS_THREAD_RUNNING=false;
}
if (!lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
createAlert("Turn on ur GPS provider", new int[] {
R.string.yes, R.string.no },2);
return;
}
if (!lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
createAlert("Turn on ur Network provider", new int[] {
R.string.yes, R.string.no },2);
return;
}
Toast.makeText(PreHomeScreen.this,
"Turn on your both Location provider and try again ",
Toast.LENGTH_LONG).show();
} else {
//////////////////////////////////Do ur work/////////////////////////////////////
}
}
};
Mon blog contient un exemple de code sur la façon de créer une étoile t les services de localisation et attendez un emplacement dans un thread de travail. Vous pouvez commencer à rechercher un emplacement au démarrage de l'application, mais continuer à l'exécuter pendant qu'il attend en arrière-plan. L'utilisateur peut avoir besoin de faire quelque chose avant que l'emplacement ne soit requis et, à ce moment, les services de localisation peuvent renvoyer un emplacement utilisable.
- 1. fournisseur GPS non disponible
- 2. Changement de fournisseur réseau et GPS
- 3. Basculer entre GPS et fournisseur réseau
- 4. LocationManager Fournisseur d'exception "GPS" inconnue
- 5. chercher l'emplacement par le biais du fournisseur GPS et réseau
- 6. Connexion entre le réseau et le fournisseur GPS
- 7. Comment basculer entre le GPS et le fournisseur de réseau?
- 8. Basculer entre gps et fournisseur réseau selon la disponibilité
- 9. Application C++ pure pour Android et ses performances
- 10. MongoDB: requête imbriquée avec des tableaux, et ses performances
- 11. Numéro de disponibilité du fournisseur de localisation GPS
- 12. Android détecter fournisseur GPS, mais ne pas obtenir l'emplacement
- 13. Emplacement IS venant du fournisseur de réseau ou gps
- 14. Émulateur Android: déconnecter le périphérique GPS du fournisseur
- 15. fournisseur "GPS" exception inconnue tout en essayant de removeTestProvider
- 16. Comment changer le fournisseur Gps en réseau pour l'emplacement géographique?
- 17. problème avec Android fournisseur GPS: trop de mises à jour
- 18. Android LocationManager et ses mises à jour
- 19. Scala pour améliorer ses performances compréhensions a comparé
- 20. Basculer entre le réseau et le fournisseur GPS sur le service pas sur l'activité
- 21. Utiliser le GPS et le fournisseur de réseau en même temps dans Android
- 22. problèmes pour obtenir le Latitude en utilisant le réseau et le fournisseur GPS
- 23. Accéder à la localisation GPS et l'emplacement du fournisseur de réseau simultanément sur Android
- 24. Carte GPS Coordonne une image et dessine des points GPS
- 25. Activer et désactiver le GPS sur Android?
- 26. Lecture GPS et Boussole
- 27. Périphériques GPS et programmation
- 28. Iphone4 et GPS alternatives
- 29. Android GPS Speed
- 30. Les avis destinés mal à un site Web et ses performances
Utilisez le fournisseur de réseau ... Merci – st0le
mais pourquoi fournisseur de GPS très lent pour détecter l'emplacement? – Dev
Merci stl0e & Jonas ... – Dev