2010-09-29 6 views
1

J'ai un problème pour obtenir les coordonnées GPS en 2.1.problème pour obtenir les coordonnées GPS dans Android 2.1 (Réponse trouvée)

Le code j'utilise droit est maintenant fonctionne bien dans 1.6, mais quand je teste même APK 1.6 appareil montre des valeurs nulles

s'il vous plaît me aider à trouver un moyen de travailler avec 2,1 appareils aussi

Voici mon code.

public class GpsLocator { 

    private static String PROVIDER="gps"; 
    private LocationManager myLocationManager=null; 

    public GpsLocator(Context context) { 
     myLocationManager=(LocationManager)context.getSystemService(Context.LOCATION_SERVICE); 
    } 

    public void myOnresume() { 
     myLocationManager.requestLocationUpdates(PROVIDER, 0, 0, onLocationChange); 
    } 

    public void myonPause() { 
     myLocationManager.removeUpdates(onLocationChange); 
    } 

    public double getLatitude() { 
     Location loc=myLocationManager.getLastKnownLocation(PROVIDER); 
     if (loc==null) { 
     return(0); 
     } 
     return(loc.getLatitude()); 
    } 

    public double getLongitude() { 
     Location loc=myLocationManager.getLastKnownLocation(PROVIDER); 
     if (loc==null) { 
     return(0); 
     } 

     return(loc.getLongitude()); 
    } 

    LocationListener onLocationChange=new LocationListener() { 

     public void onLocationChanged(Location location) { 
     } 

     public void onProviderDisabled(String provider) { 
     // required for interface, not used 
     } 

     public void onProviderEnabled(String provider) { 
     // required for interface, not used 
     } 

     public void onStatusChanged(String provider, int status,Bundle extras) { 
     // required for interface, not used 
     } 
    }; 
} 

dans le fichier manifeste i ajoute l'autorisation pour l'accès au fichier, ils sont

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Répondre

3
LocationManager locationManager; 
    String context = Context.LOCATION_SERVICE; 
    locationManager = (LocationManager)getSystemService(context); 
    Criteria criteria = new Criteria(); 
    criteria.setAccuracy(Criteria.ACCURACY_FINE); 
    criteria.setAltitudeRequired(false); 
    criteria.setBearingRequired(false); 
    criteria.setCostAllowed(true); 
    criteria.setPowerRequirement(Criteria.POWER_LOW); 
    String provider = locationManager.getBestProvider(criteria, true); 

    Location location = locationManager.getLastKnownLocation(provider); 

    updateWithNewLocation(location); 

    locationManager.requestLocationUpdates(provider, 2000, 10, 
              locationListener); 
    } 

    private final LocationListener locationListener = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     updateWithNewLocation(location); 
    } 

    public void onProviderDisabled(String provider){ 
     updateWithNewLocation(null); 
    } 

    public void onProviderEnabled(String provider){ } 
    public void onStatusChanged(String provider, int status, 
           Bundle extras){ } 
    }; 
2

LocationManager.getLastKnownLocation ne garantit pas qu'il retournera un emplacement valide. Si une correction GPS n'a pas encore été établie, elle retournera null. Le seul moyen fiable d'obtenir un emplacement réel est d'utiliser l'interface LocationListener. Je vois que vous avez défini un LocationListener, mais ne l'utilisez pas.

Vous devez modifier votre code afin qu'il attende le premier appel à onLocationChanged avant d'essayer de faire quoi que ce soit avec l'emplacement.

+0

merci u tuomasR ur suggestions, j'ai même essayé en cela aussi. –

+0

De toute façon maintenant j'ai eu la solution –

1

Salut, je suis également confronté à même problème en 2.1 après que je résolus comme ça ... cela fonctionnera pour vous

myManager = ((LocationManager) ApplicationController.getAppContext() 
      .getSystemService(Context.LOCATION_SERVICE)); 

myManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
      1 * 1000, 0.00001f, this); 

Suivre changé d'emplacement méthode asy dans tha u obtiendrez lat/et à long

ne pas utiliser l'objet paquet là-bas, il ne fonctionnera pas au lieu de cela, vous pouvez utiliser le GPS classe pour satellite 2.1 ..

Questions connexes