Android应用程序中的谷歌地图(V2)

时间:2013-04-06 17:40:44

标签: android google-maps gps google-maps-markers google-maps-api-2

熟悉Google Maps API(v2)并将其集成到我的Android应用程序中,我有两个问题,我没有找到最好的方法:

第一个始终关注当前用户位置(如GPS应用程序)。我做的是在onCreate我获得用户位置(根据我在这里和那里找到的一些东西))

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map);

        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
        Criteria criteria = new Criteria();
        String bestProvider = locationManager.getBestProvider(criteria, true);
        Location location = locationManager.getLastKnownLocation(bestProvider);
        LatLng currentUserPosition = new LatLng(location.getLatitude(), location.getLongitude());
        // setting the cam position to current position
        CameraPosition camPosition = new CameraPosition(currentUserPosition, 17f, 30f, 0f);
        CameraUpdate update = CameraUpdateFactory.newCameraPosition(camPosition);
        mapFragment.getMap().animateCamera(update);

        // updating map every second
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
                1000, // 1-second interval.
                10, // 10 meters.
                listener);
}

其中listenerLocationListener配置如下:

private final LocationListener listener = new LocationListener() {

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onLocationChanged(Location location) {
        CameraPosition camPosition = new CameraPosition(new LatLng(location.getLatitude(), location.getLongitude()), 17f, 30f, 0f);
        MapFragment mapFragment = (MapFragment) getFragmentManager().findFragmentById(R.id.map);
        CameraUpdate update = CameraUpdateFactory.newCameraPosition(camPosition);
        mapFragment.getMap().animateCamera(update);
    }
};

这是正确的方法吗?
第二件事是用户可以触摸地图并在地图上动态添加标记(使用自己的标题和内容)。我试图找到(但没有)一种在标记之间绘制路径的方法,并像gps应用程序一样工作。这有可能吗?
谢谢

2 个答案:

答案 0 :(得分:1)

我强烈建议您遵循documentation中的开发者指南教程,了解将Google地图Android API v2集成到您的应用中的正确方法,并检查与Google Play服务SDK捆绑在一起的sample code。< / p>

自动关注用户(我的位置点)位置的最佳(也是最简单)方法是实施OnMyLocationChangeListener并在该界面提供的回调中相应地更新相机。

要创建连接标记的一系列线段,您应该能够使用Polyline类。 修改:您可能会发现此相关answer对于在两个标记之间绘制路径非常有用。

答案 1 :(得分:0)

实际上Google Map API V2你可以使用:

map.setMyLocationEnabled(true);

这将在Google地图窗口中创建一个图标,以跟踪用户当前位置。 实际上我认为实现整个LocationListener更容易。

关于标记问题,您需要实现某种窗口,用户可以在其中设置所有标记数据。然后你可以像这样动态添加标记:

marker = map.addMarker(new MarkerOptions().position(latlng).title(markersTitleArray[i]).icon(BitmapDescriptorFactory.fromResource(R.drawable.marker)));

如果您想在点击地图时添加此标记,则需要实现:

map.setOnMapClickListener(this);
map.setOnMapLongClickListener(this);

Activity

最后关于您的上一个问题,因为您已经获得了关于如何在地图上绘制Polyline方向的答案:

Draw driving route between 2 GeoPoints on GoogleMap SupportMapFragment