2016-07-13 29 views
0

Offensichtlich bin ich nicht. Hier ist, was ich verwende, um den Standort zu bekommen.LocationManager sagt, ich bin in Antarctica

SingleShotLocationProvider.requestSingleUpdate(getContext(), 
          new SingleShotLocationProvider.LocationCallback() { 
           @Override 
           public void onNewLocationAvailable(SingleShotLocationProvider.GPSCoordinates location) { 
            //use location.longitude and location.latitude 
           } 
          }); 

Und hier ist die Klasse, die ich oben verwenden:

public class SingleShotLocationProvider { 

public interface LocationCallback { 
    void onNewLocationAvailable(GPSCoordinates location); 
} 

public static void requestSingleUpdate(final Context context, final LocationCallback callback) { 
    final LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 

    //If network is available 
    if (locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_COARSE); 
     try { 
      locationManager.requestSingleUpdate(criteria, new LocationListener() { 
       @Override 
       public void onLocationChanged(Location location) { 
        callback.onNewLocationAvailable(new GPSCoordinates(location.getLatitude(), location.getLongitude())); 
       } 
       @Override public void onStatusChanged(String provider, int status, Bundle extras) {} 
       @Override public void onProviderEnabled(String provider) {} 
       @Override public void onProviderDisabled(String provider) {} 
      }, null); 
     } 
     catch (SecurityException e){ 
      Log.e("Location", "security exception"); 
     } 
    } 
    //If GPS is enabled 
    else if (locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)){ 
     Criteria criteria = new Criteria(); 
     criteria.setAccuracy(Criteria.ACCURACY_FINE); 
     try { 
      locationManager.requestSingleUpdate(criteria, new LocationListener() { 
       @Override 
       public void onLocationChanged(Location location) { 
        callback.onNewLocationAvailable(new GPSCoordinates(location.getLatitude(), location.getLongitude())); 
       } 
       @Override public void onStatusChanged(String provider, int status, Bundle extras) {} 
       @Override public void onProviderEnabled(String provider) {} 
       @Override public void onProviderDisabled(String provider) {} 
      }, null); 
     } 
     catch (SecurityException e){ 
      Log.e("Location", "security exception"); 
     } 
    } 
    else{ 
     Toast.makeText(context, "No network or GPS available. Try again later.", Toast.LENGTH_LONG).show(); 
    } 
} 


// consider returning Location instead of this dummy wrapper class 
public static class GPSCoordinates { 
    public float longitude = -1; 
    public float latitude = -1; 

    public GPSCoordinates(float lon, float lat) { 
     longitude = lon; 
     latitude = lat; 
    } 

    public GPSCoordinates(double lon, double lat) { 
     longitude = (float) lon; 
     latitude = (float) lat; 
    } 
} 
} 

Wer auf irgendwelche Ideen, was hier vor sich geht? Aus irgendeinem Grund kann ich den Standort nur abrufen, wenn GPS aktiviert ist, und nicht über mein Netzwerk/WLAN. Wenn ich versuche, GPS zu deaktivieren, scheitern sowohl die if- als auch die elif-Bedingungen, obwohl ich eine gute Netzwerkverbindung habe. Gedanken?

Antwort

1

Sie übergeben die Parameter in der falschen Reihenfolge. Auf dem Konstruktor GPSCoordinates erwarten Sie Länge und Breite in dieser Reihenfolge. Und wenn Sie die GPSCoordinates erstellen, übergeben Sie Breite und Länge in umgekehrter Reihenfolge.

dies ändern GPSCoordinates zu:

public static class GPSCoordinates { 
    public float longitude = -1; 
    public float latitude = -1; 

    public GPSCoordinates(float lat, float lon) { 
     latitude = lat; 
     longitude = lon; 
    } 

    public GPSCoordinates(double lat, double lon) { 
     latitude = (float) lat; 
     longitude = (float) lon; 
    } 
} 
+0

Guter Fang! Ich glaube, ich brauchte nur ein zweites Paar Augen. Vielen Dank! – sadelbrid