根据this教程,我有一个带谷歌地图的应用程序。根据{{3}}教程,我也获得了用户的当前位置。
截至09/15,两者都在使用最新的API。
Google地图位于视图中的片段内。我一直在尝试使用public void onMapReady(GoogleMap map)
函数中的用户当前位置加载地图,只加载失败的结果和大量的 NullPointerExceptions 。有点像...
@Override
public void onMapReady(GoogleMap map) {
mMap = map;
mMap.setMyLocationEnabled(true);
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
mLoadLocation = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
if(mLastLocation != null){
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLoadLocation, 18.0f));
}else{
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.422611, -122.0840577), 18.0f));
}
}
但是mLastLocation
总是返回NULL。所以我将moveCamera
电话移至onConnected
,如下所示
@Override
public void onConnected(Bundle bundle) {
mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
if (mLastLocation != null) {
mLoadLocation = new LatLng(mLastLocation.getLatitude(), mLastLocation.getLongitude());
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(mLoadLocation, 18.0f));
} else {
Toast.makeText(this, "No Location", Toast.LENGTH_LONG).show();
}
}
这很有魅力,正如我所希望的那样。但是,在调用onConnected
时,地图视图始终是否准备就绪?或者这是一种逐个设备的东西?我想保留功能,无论采用何种方法。
我已经尝试了每个可以找到的SO方法,用于使用用户的当前位置启动地图,但它们都没有工作。很多崩溃和NULL值。
提前致谢。
答案 0 :(得分:0)
GoogleMap和FusedLocation都是不同的类,所以他们的方法,所以很难分辨哪个方法将首先被调用。最好早点调用FusedLocation并初始化mLastLocation或使用它应用一些默认值。然后在onMapReady方法中将摄像机移动到当前位置或mLastLocation的默认位置。