我正在开发一款用于跟踪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 - 这非常有效。
有关让地图工作的任何帮助,即使在暂停 - 恢复后也是如此?
答案 0 :(得分:1)
我看到了如何在setupMap方法中添加片段的一些可能问题。我建议重新阅读谷歌的指南,或查看以下帖子,特别是在答案中链接的博客文章,因为它有一个完整的工作类,可以跟踪用户的位置,并可以暂停/恢复正常工作。