Ø 知识点:注册服务、定位权限、监听、地图UI及相关参数设置
Ø 实现详情:
1. 注册不同手机端定位服务:在application中注册
2. 设置定位监听及接口实现
3. 地图自带图标、缩放工具条等设计以及设置相关定位选项
/** 定位:地图定位功能 */ setUpMapLocation();
private void setUpMapLocation() { aMap.setLocationSource(this);// 设置定位监听 //初始化client locationClient = new AMapLocationClient(getApplicationContext()); //设置定位参数 locationClient.setLocationOption(getDefaultOption()); aMap.getUiSettings().setZoomPosition(AMapOptions.ZOOM_POSITION_RIGHT_CENTER);//设置缩放控件在右边中间位置 aMap.getUiSettings().setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示 aMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false // 设置定位的类型为定位模式 ,可以由定位、跟随或地图根据面向方向旋转几种 aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE); locationClient.setLocationListener(this);//设置定位回调监听 //启动定位 locationClient.startLocation(); } private AMapLocationClientOption getDefaultOption() { AMapLocationClientOption mOption = new AMapLocationClientOption(); mOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//可选,设置定位模式,可选的模式有高精度、仅设备、仅网络。默认为高精度模式 mOption.setGpsFirst(false);//可选,设置是否gps优先,只在高精度模式下有效。默认关闭 mOption.setHttpTimeOut(30000);//可选,设置网络请求超时时间。默认为30秒。在仅设备模式下无效 mOption.setInterval(2000);//可选,设置定位间隔。默认为2秒 mOption.setNeedAddress(true);//可选,设置是否返回逆地理地址信息。默认是ture mOption.setOnceLocation(false);//可选,设置是否单次定位。默认是false mOption.setOnceLocationLatest(false);//可选,设置是否等待wifi刷新,默认为false.如果设置为true,会自动变为单次定位,持续定位时不要使用 return mOption; } /** * 定位监听 */ @Override public void onLocationChanged(AMapLocation aMapLocation) { if (locationChangedListener != null && aMapLocation != null) { locationChangedListener.onLocationChanged(aMapLocation);//显示系统小蓝点*/ if (aMapLocation.getErrorCode() == 0) { //定位成功回调信息,设置相关消息 aMapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表 latitude = aMapLocation.getLatitude();//获取经度 longitude = aMapLocation.getLongitude();//获取纬度; aMapLocation.getAccuracy();//获取精度信息 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(aMapLocation.getTime()); df.format(date);//定位时间 aMapLocation.getAddress();//地址,如果option中设置isNeedAddress为false,则没有此结果 aMapLocation.getCountry();//国家信息 aMapLocation.getProvince();//省信息 aMapLocation.getCity();//城市信息 aMapLocation.getDistrict();//城区信息 aMapLocation.getCityCode();//城市编码 aMapLocation.getAdCode();//地区编码 } else { //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 Log.e("MainActivity", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } /** * 启动定位 */ @Override public void activate(OnLocationChangedListener listener) { locationChangedListener = listener; } /** * 停止定位 */ @Override public void deactivate() { locationChangedListener = null; //销毁定位客户端 if (locationClient != null) { locationClient.stopLocation(); locationClient.onDestroy(); } locationClient = null; }