在上篇的基础上,咱们继续添加路况和定位功能:android
高德地图封装了交通路况信息,经过调用AMap 类的方法setTrafficEnabled(),显示路况信息。git
在fragment_map中添加路况图层控制按钮api
<!--路况图层控制按钮--> <CheckBox android:id="@+id/louk_btn" android:layout_margin="20dp" android:layout_alignParentRight="true" android:layout_width="52dp" android:button="@color/transparent" android:background="@drawable/map_traffic" android:layout_height="52dp" />
在initMap的setUpMap()方法中控制路况图层:ide
//路况图层触发事件 mCBLouk.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //判断路况图层是否显示 if (mCBLouk.isChecked()){ aMap.setTrafficEnabled(true); mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery)); mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic_hl)); }else{ aMap.setTrafficEnabled(false); mCBLouk.setBackgroundColor(getResources().getColor(R.color.light_gery)); mCBLouk.setButtonDrawable(getResources().getDrawable(R.drawable.map_traffic)); } } });
2.0以上版本的定位和百度定位相似,专门开启了一个服务去定位,下面主要介绍2.0以上版本的定位:函数
2.1 首先在manifest.xml文件中配置服务this
<service android:name="com.amap.api.location.APSService"></service>
2.2 在setUpMap(参考上篇)函数中加载startPostion()方法,开始请求定位。编码
/** * 开始定位 */ public void startPostion() { // 初始化定位, mlocationClient = new AMapLocationClient(getActivity().getApplicationContext()); // 初始化定位参数 mLocationOption = new AMapLocationClientOption(); //单次定位 mLocationOption.setOnceLocation(true); // 设置定位模式为高精度定位 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); // 设置定位回调监听 mlocationClient.setLocationListener(this); // 设置定位参数 mlocationClient.setLocationOption(mLocationOption); //请求位置 mlocationClient.startLocation(); } /** * long类型时间格式化 */ public String convertToTime(long time) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(time); return df.format(date); }
2.2 在onLocationChanged中返回定位数据,而后在地图上标注定位图标。spa
/** * 混合定位回调函数 */ @Override public void onLocationChanged(AMapLocation location) { if (location != null && location.getErrorCode() == 0) { Double geoLat = location.getLatitude(); Double geoLng = location.getLongitude(); mMarkerA.setPosition(new LatLng(geoLat, geoLng)); u = CameraUpdateFactory.newLatLngZoom(new LatLng(geoLat, geoLng), 18); aMap.animateCamera(u); String cityCode = ""; String desc = ""; Bundle locBundle = location.getExtras(); if (locBundle != null) { cityCode = locBundle.getString("citycode"); desc = locBundle.getString("desc"); } String str = ("定位成功:(" + geoLng + "," + geoLat + ")" + "\n精 度 :" + location.getAccuracy() + "米" + "\n定位方式:" + location.getProvider() + "\n定位时间:" + convertToTime(location.getTime()) + "\n城市编码:" + cityCode + "\n位置描述:" + desc + "\n省:" + location.getProvince() + "\n市:" + location.getCity() + "\n区(县):" + location.getDistrict() + "\n区域编码:" + location .getAdCode()); } else { } }
2.3 退出时,中止定位服务。code
@Override public void onPause() { super.onPause(); // 中止定位 mlocationClient.stopLocation(); } public void onDestroy() { mlocationClient.onDestroy(); super.onDestroy(); }