Android:在Google地图活动中设置用户位置

时间:2011-08-13 23:53:11

标签: android google-maps

我刚刚在我的应用中制作了一个向用户显示地图的活动。如何将用户的位置放在此地图上?这样做有点困惑所以任何帮助都会受到赞赏!

另外:当我设置地图时,我不得不包括:MapView mapView =(MapView)findViewById(R.id.mapview); 为什么你必须包括这个,因为你还没有:setContentView(R.layout.main);? - 听起来像一个白痴的问题,但它只是我想知道的东西!

2 个答案:

答案 0 :(得分:1)

我建议使用MyLocationOverlay。这将获取用户的当前位置并通过蓝点将其显示在地图上。您可以通过以下方式完成此任务:

List<Overlay> overlays = mMaps.getOverlays();
overlays.clear();

MyLocationOverlay myLocOverlay = new MyLocationOverlay(this, mMaps);
myLocOverlay.enableMyLocation();
overlays.add(myLocOverlay);
myLocOverlay.runOnFirstFix(new Runnable() { public void run() {
    mMaps.getController().animateTo(myLocOverlay.getMyLocation());
}});

答案 1 :(得分:0)

以下是执行此任务的示例代码。简短说明,你首先获得locationService来学习位置然后使用Criteria api你让系统根据你在Criteria中的设置选择最佳提供者然后你得到提供者,从提供者请求位置更新并实现LocationListener接口,也可以缓存最后一个位置你可以调用getLastKnownLocation,但我不指望这可能导致过时或空结果

        String contenxt = Context.LOCATION_SERVICE;
        locationManager = (LocationManager) getSystemService(contenxt);

        /*
         * trying to get the best provider
         * with given conditions
         */
        Criteria criteria = new Criteria();
        criteria.setAccuracy(Criteria.ACCURACY_FINE);
        criteria.setAltitudeRequired(false);
        criteria.setCostAllowed(true);
        criteria.setSpeedRequired(false);
        criteria.setBearingRequired(false);
        criteria.setPowerRequirement(Criteria.POWER_LOW);

        String provider = locationManager.getBestProvider(criteria, true);
        Log.d(GAL, provider);

        locationManager.requestLocationUpdates(provider, 3000, 30, locationListener);
        location = locationManager.getLastKnownLocation(provider);

注意:别忘了实施位置监听器

回答注意:您没有将mapView与findViewById(R.id.mapView)一起包含在您的xml中,因此在您的布局中也是如此。您只是引用mapView来使用内置方法,如setZoom,animateTo等。