我刚刚在我的应用中制作了一个向用户显示地图的活动。如何将用户的位置放在此地图上?这样做有点困惑所以任何帮助都会受到赞赏!
另外:当我设置地图时,我不得不包括:MapView mapView =(MapView)findViewById(R.id.mapview); 为什么你必须包括这个,因为你还没有:setContentView(R.layout.main);? - 听起来像一个白痴的问题,但它只是我想知道的东西!
答案 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等。