android中高德地图定位功能并且获取定位的城市
1、今天再一次用到了地图定位功能和地图显示功能,以前一直用的是高德地图定位,这次还是用高德,记录一下以便以后再做时方便一些。因为业务需要的功能不是很全,可以参考https://www.2cto.com/kf/201504/396156.html
2、图片效果:
4、首先是根据当前位置获得经纬度activity
(1)androidMainfest.xml中写入高德地图api的key值
<meta-data android:name="com.amap.api.v2.apikey" android:value="9cb6f84fb4821043af1bd1*******" />(2)引入地图和定位的jar包(到网上下载最新的)
//地图显示功能 compile files('libs/AMap_2DMap_V2.9.0_20160525.jar') //地图定位功能 compile files('libs/AMap_Location_V2.5.0_20160526.jar')(3)Activity类实现定位监听
public class MainBuildingActivity extends MainActivity implements AMapLocationListener(4)
private AMapLocationClient locationClient = null; private AMapLocationClientOption locationOption = null;
locationClient = new AMapLocationClient(this.getApplicationContext()); locationOption = new AMapLocationClientOption(); // 设置定位模式为高精度模式 locationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); // 设置定位监听 locationClient.setLocationListener(this); initOption(); locationClient.setLocationOption(locationOption); locationClient.startLocation();
@Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation.getErrorCode() == 0) { final Map<String, String> map = new HashMap<>(); //获取纬度 map.put("longitude", String.valueOf(aMapLocation.getLongitude())); map.put("latitude", String.valueOf(aMapLocation.getLatitude())); ToastUtil.showShort(MainBuildingActivity.this,"___"+aMapLocation.getCity()); Log.i("feng",aMapLocation.getCity()); } }
private void initOption() { // 设置是否需要显示地址信息 locationOption.setNeedAddress(true); /** * 设置是否优先返回GPS定位结果,如果30秒内GPS没有返回定位结果则进行网络定位 * 注意:只有在高精度模式下的单次定位有效,其他方式无效 */ // locationOption.setGpsFirst(true); // 设置是否开启缓存 locationOption.setLocationCacheEnable(true); // 设置发送定位请求的时间间隔,最小值为1000,如果小于1000,按照1000算 locationOption.setInterval(5000); locationOption.setOnceLocation(true); }
5、根据经纬度在地图上显示的功能Activity
public class BuildingPostionActivity extends BaseActivity implements OnMapLoadedListener,AMap.OnMarkerClickListener { private AMap aMap; private MapView mapView; private List<LatLng> latLngList = new ArrayList<>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_location); mapView = findViewById(R.id.map); mapView.onCreate(savedInstanceState); // 此方法必须重写 init(); } /** * 初始化AMap对象 */ private void init() { setTitle("楼盘位置",false,null); registerBack(); if (aMap == null) { aMap = mapView.getMap(); setUpMap(); } } private void setUpMap() { aMap.setOnMapLoadedListener(BuildingPostionActivity.this);// 设置amap加载成功事件监听器 aMap.setOnMarkerClickListener(this); // 往地图上添加位置标志marker addMarkersToMap(); } /** * 方法必须重写 */ @Override protected void onResume() { super.onResume(); mapView.onResume(); } /** * 方法必须重写 */ @Override protected void onPause() { super.onPause(); mapView.onPause(); } /** * 方法必须重写 */ @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mapView.onSaveInstanceState(outState); } /** * 方法必须重写 */ @Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); } /** * 在地图上添加marker */ private void addMarkersToMap() { //List<BuildingBean> positions = (List<BuildingBean>) getIntent().getSerializableExtra("positions"); List<BuildingBean> positions=new ArrayList<>(); BuildingBean bean=new BuildingBean(); bean.setLatitude("123.623458"); bean.setLongitude("41.780748"); bean.setBuildingName("滑翔小区"); positions.add(bean); for (BuildingBean position:positions) { LatLng latLng = new LatLng(Double.valueOf(position.getLongitude()),Double.valueOf(position.getLatitude())); Marker marker = aMap.addMarker(new MarkerOptions().position(latLng).icon( BitmapDescriptorFactory.fromResource(R.drawable.location)).title(position.getBuildingName())); marker.showInfoWindow(); latLngList.add(latLng); } } /** * 对marker标注点点击响应事件 */ @Override public boolean onMarkerClick(final Marker marker) { return false; } /** * 监听amap地图加载成功事件回调 */ @Override public void onMapLoaded() { // 设置所有maker显示在当前可视区域地图中 LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (LatLng latLng:latLngList) { builder.include(latLng); } LatLngBounds build = builder.build(); aMap.moveCamera(CameraUpdateFactory.newLatLngBounds(build, 10)); aMap.moveCamera(CameraUpdateFactory.zoomBy(4)); aMap.setOnMapLoadedListener(this);//设置地图显示监听器 } }
(2)xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/white" android:orientation="vertical" > <com.amap.api.maps2d.MapView android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>