我只需要获取用户位置。最好是精确的位置,但如果不可能的话,可以选择一个大致的位置。

根据文档:

LocationClient.getLastLocation()
Returns the best most recent location currently available.


LocationManager.getLastKnownLocation(String)
Returns a Location indicating the data from the last known location fix obtained from the given provider.
如果我的理解是正确的,那么前者将给我一个很好的结果(有时为空),而后者将给我一个结果,而该结果很少为空。

这是我的代码(简体)

locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationClient = new LocationClient(this, this, this);

@Override
public void onConnected(Bundle dataBundle) {
    setUserLocation();
}

private void setUserLocation() {
    myLocation = locationClient.getLastLocation();

    if (myLocation == null) {
        myLocation = locationManager.getLastKnownLocation(locationManager.getBestProvider(new Criteria(), false));
        if (myLocation == null) {
            //I give up, just set the map somewhere and warn the user.
            myLocation = new Location("");
            myLocation.setLatitude(-22.624152);
            myLocation.setLongitude(-44.385624);
            Toast.makeText(this, R.string.location_not_found, Toast.LENGTH_LONG).show();
        }
    } else {
        isMyLocationOK = true;
    }
}

它似乎正在工作,但我的问题是:
  • 我对getLastLocationgetLastKnownLocation的理解正确吗?
  • 这是一个好方法吗?
  • 我可以在同一 Activity 中同时使用两者时遇到麻烦吗?

  • 谢谢

    最佳答案

    如果无法确定位置定位,则LocationClient.getLastLocation()仅返回nullgetLastLocation()不比getLastKnownLocation()差,并且通常更好。我认为不值得像您那样“回退”到getLastKnownLocation()

    两者都不会给您带来麻烦,但这实在是太过分了。

    当然,您必须记住LocationClient是Google Play服务的一部分,因此仅在平台包括Google Play商店的设备上可用。某些设备可能使用的是非标准版本的Android,您将无法访问LocationClient

    Google Play服务的文档对此进行了更详细的讨论。

    关于android - LocationManager和LocationClient一起获得用户位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17304277/

    10-12 00:11