用户位置不正确

Posted

技术标签:

【中文标题】用户位置不正确【英文标题】:User's location not correct 【发布时间】:2018-04-01 17:57:47 【问题描述】:

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

它返回我:

纬度: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);

【问题讨论】:

使用FusedLocationProviderClient 你能提供一些链接或一些代码吗?我不熟悉这个 【参考方案1】:

您需要的位置在方法onLocationChanged中返回。 所以你可以将它分配给一个变量然后返回它:

private Location lastLocation;

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


public Location getLastLocation() 
    return lastLocation;

在活动的onCreate 中调用requestLocationUpdates,然后在需要显示时调用getLastLocation

或者你可以实现一个回调来在位置改变时通知活动。

【讨论】:

您能否提供一些有关如何通过“getLastLocation()”方法获取纬度和经度的更多信息【参考方案2】:

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

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

它在一个不可用的情况下提供后备提供者。使用这个库有一点学习曲线,但是一旦你实现它,它就会很好地工作。

【讨论】:

以上是关于用户位置不正确的主要内容,如果未能解决你的问题,请参考以下文章

数字游戏

Mapbox Flutter:初始相机位置显示不正确的位置

munbergame

API 28 位置模式与新的二进制 Google 精度设置不正确

为啥 Jcrop-tracker 不显示它的正确位置?

AppData 现在是安装用户特定应用程序(修改自己的数据)的“正确”位置吗?