1

我正在开发一个用于跟踪 GPS 数据的应用程序,它的界面中有一个大的 GoogleMap 显示正在跟踪的内容。事情按照我想要的方式进行,直到活动因任何原因(电话、主页按钮等)暂停,然后我恢复活动。

初始启动后,地图不会对任何用户交互做出反应,到目前为止这对我有用。任何将相机动画到某个位置的调用都有效,标记被绘制,用户位置和方位也是如此。在暂停-恢复循环之后,情况正好相反。地图接受用户的所有手势,但不对任何呼叫作出反应。我无法为相机设置动画、绘制标记或显示用户位置。

我尝试了很多东西,试图在恢复时强制重新加载地图设置并在暂停时将地图归零,但似乎没有任何效果。

这是我设置地图的地方,在 onCreate 中调用(并在 onResume 中尝试过):

private void setupMap(){
    getSupportFragmentManager().beginTransaction().replace(R.id.trackeractivity_map, new SupportMapFragment()).commit();
    FragmentManager fragmentManager = getSupportFragmentManager();
    SupportMapFragment supportMapFragment = (SupportMapFragment) fragmentManager.findFragmentById(R.id.trackeractivity_map);
    mMap = supportMapFragment.getMap();
    mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
    mMap.setMyLocationEnabled(true);
}

这是我更新用户位置并为相机设置动画的地方:

private void updateUserLocation(double lat, double lon){
    Log.d(TAG, "updateUserLocation - " + lat + " : " + lon);
    mLastLocationLat = lat;
    mLastLocationLon = lon;
    if (mMap != null){
        CameraPosition userPos = new CameraPosition(new LatLng(lat, lon), mMap.getMaxZoomLevel()-4, 0, 0);
        mMap.animateCamera(CameraUpdateFactory.newCameraPosition(userPos));
    }
}

这就是我向轨道添加新标记的地方:

private void updateMapOverlay(double lat, double lon){
    Log.d(TAG, "updateMapOverlay - " + lat + " : " + lon + " - Type " + mCurrentType);
    MarkerOptions marker = new MarkerOptions();
    marker.position(new LatLng(lat, lon));
    marker.draggable(false);
    marker.icon(BitmapDescriptorFactory.fromResource(getTypeDrawableID(mCurrentType)));
    mMap.addMarker(marker);
}

以及布局中的地图片段:

<fragment
        android:id="@+id/trackeractivity_map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_margin="10dp"
        class="com.google.android.gms.maps.SupportMapFragment"
    />

如您所见,我正在使用 supportfragmentmanager,并且该活动还使用了 JFeinstein 的 SlidingMenu - 顺便说一句,效果很好。

即使在暂停恢复之后,对地图工作有任何帮助吗?

4

1 回答 1

1

我发现您在 setupMap 方法中添加片段的方式可能存在一些问题。我建议重新阅读谷歌的指南,或查看以下文章,特别是答案中链接的博客文章,因为它有一个完整的工作类,可以跟踪用户的位置并在暂停/恢复时正常工作。

https://stackoverflow.com/a/13753518/1103584

于 2013-01-28T19:20:02.437 回答