Android,Google地图和位置的执行顺序?

时间:2015-09-15 02:20:08

标签: android google-maps location-services

根据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值。

提前致谢。

1 个答案:

答案 0 :(得分:0)

GoogleMap和FusedLocation都是不同的类,所以他们的方法,所以很难分辨哪个方法将首先被调用。最好早点调用FusedLocation并初始化mLastLocation或使用它应用一些默认值。然后在onMapReady方法中将摄像机移动到当前位置或mLastLocation的默认位置。