在上篇的基礎上,咱們繼續添加路況和定位功能: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(); }