我只需要获取用户位置。最好是精确的位置,但如果不可能的话,可以选择一个大致的位置。
根据文档:
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;
}
}
它似乎正在工作,但我的问题是:
getLastLocation
和getLastKnownLocation
的理解正确吗? 谢谢
最佳答案
如果无法确定位置定位,则LocationClient.getLastLocation()
仅返回null
。 getLastLocation()
不比getLastKnownLocation()
差,并且通常更好。我认为不值得像您那样“回退”到getLastKnownLocation()
。
两者都不会给您带来麻烦,但这实在是太过分了。
当然,您必须记住LocationClient
是Google Play服务的一部分,因此仅在平台包括Google Play商店的设备上可用。某些设备可能使用的是非标准版本的Android,您将无法访问LocationClient
。
Google Play服务的文档对此进行了更详细的讨论。
关于android - LocationManager和LocationClient一起获得用户位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17304277/