用户的位置不正确

时间:2017-10-20 14:22:07

标签: java android android-location

我正在尝试获取用户当前的天气应用位置,但我得到了一些“美国”区域的位置。我尝试过多次教程但未能获得正确的当前位置。

它让我回复:

纬度:37.421998333333335

经度:-122.08400000000002

位置是“Mountain View,CA,US”

我使用的代码如下:

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) {

}
}

在我的主要课程中,我得到的位置是这样的:

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);
}

2 个答案:

答案 0 :(得分:0)

您需要的位置以方法onLocationChanged返回 因此,您可以将其分配给变量,然后将其返回:

private Location lastLocation;

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

public Location getLastLocation() {
    return lastLocation;
}

在您的活动的requestLocationUpdates中致电onCreate,然后在需要展示时致电getLastLocation

或者您可以实施回调以在位置更改时通知活动。

答案 1 :(得分:0)

您可能正在获取最后一个已知位置,并且使用该工具可能会回复此地址。考虑使用更好的工具或只使用FusedLocationProviderClient。但是,我个人喜欢SmartLocation库。

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

如果一个不可用,它会为后备提供商提供。使用该库有一点学习曲线,但是一旦实现它,它就能很好地工作。