android中高德地图定位功能并且获取定位的城市

1、今天再一次用到了地图定位功能和地图显示功能,以前一直用的是高德地图定位,这次还是用高德,记录一下以便以后再做时方便一些。因为业务需要的功能不是很全,可以参考https://www.2cto.com/kf/201504/396156.html

2、图片效果:

android中高德地图定位功能并且获取定位的城市

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>