2017-10-20 4 views
0

Ich versuche, den aktuellen Standort des Benutzers für meine Wetteranwendung zu erhalten, aber ich bekomme den Standort von einigen "US" -Bereich. Ich habe mehrere Tutorials ausprobiert, konnte aber nicht den korrekten aktuellen Speicherort ermitteln.Position des Benutzers nicht korrekt

Es gibt mir:

Breite: 37,421998333333335

Länge: -122,08400000000002

Die Lage ist "Mountain View, CA, USA"

Der Code, den ich verwendet habe, ist unter :

GpsTracker.java

public class GpsTracker implements LocationListener { 

Context context; 

public GpsTracker(Context c) 
{ 
    context = c; 
} 

public Location getLocation() 
{ 

    if(ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED){ 
     Toast.makeText(context,"Permission not granted",Toast.LENGTH_SHORT).show(); 
     return null; 
    } 

    LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE); 
    boolean isGpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 

    if(isGpsEnabled) 
    { 
     lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,this); 
     Location l = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     return l; 
    } 
    else{ 
     Toast.makeText(context,"Enable GPS",Toast.LENGTH_SHORT).show(); 
    } 

    return null; 
} 

@Override 
public void onLocationChanged(Location location) { 
} 

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
} 

@Override 
public void onProviderEnabled(String provider) { 

} 

@Override 
public void onProviderDisabled(String provider) { 

} 
} 

In meinem Hauptklasse Ich erhalte die Lage wie folgt aus:

public void getLocation() 
{ 
gpsTracker = new GpsTracker(getApplicationContext()); 
Location l = gpsTracker.getLocation(); 
if(l != null) 
{ 
    lat = l.getLatitude(); 
    lon = l.getLongitude(); 
} 
    Log.d("User's location","Latitude"+lat); 
    Log.d("User's location","Longitude"+lon); 
} 
+0

Verwenden Sie 'FusedLocationProviderClient' –

+0

Können Sie einen Link oder Code bereitstellen? Ich bin nicht vertraut mit dieser –

Antwort

0

Der Ort, die Sie in der Methode onLocationChanged zurücks wird.
So könnte man es einer Variablen zuweisen und dann zurück:

private Location lastLocation; 

@Override 
public void onLocationChanged(Location location) { 
    lastLocation = location; 
} 

public Location getLastLocation() { 
    return lastLocation; 
} 

Anruf requestLocationUpdates im onCreate Ihrer Aktivität und dann getLastLocation anrufen, wenn Sie es zeigen müssen.

Oder Sie können einen Rückruf implementieren, um die Aktivität zu benachrichtigen, wenn sich der Standort ändert.

+0

Können Sie mir weitere Informationen zur Verfügung stellen, wie kann ich den Breiten- und Längengrad von der Methode "getLastLocation()" erhalten –

0

Sie erhalten wahrscheinlich den letzten bekannten Ort und die Verwendung dieses Tools gibt wahrscheinlich diese Adresse zurück. Erwägen Sie, ein besseres Tool oder nur FusedLocationProviderClient zu verwenden. Ich mag SmartLocation-Bibliothek jedoch persönlich.

https://github.com/mrmans0n/smart-location-lib

Es gibt Ausweich Anbieter im Falle eines nicht verfügbar. Es gibt eine kleine Lernkurve, um die Bibliothek zu verwenden, aber sobald Sie sie implementieren, funktioniert es gut.

Verwandte Themen