效果以下:android
初始化 AMap 對象內容在上一章節中有詳細講解。api
實現定位藍點:網絡
MyLocationStyle myLocationStyle; myLocationStyle = new MyLocationStyle();//初始化定位藍點樣式類myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,而且會跟隨設備移動。(1秒1次定位)若是不設置myLocationType,默認也會執行此種模式。 myLocationStyle.interval(2000); //設置連續定位模式下的定位間隔,只在連續定位模式下生效,單次定位模式下不會生效。單位爲毫秒。 aMap.setMyLocationStyle(myLocationStyle);//設置定位藍點的Style //aMap.getUiSettings().setMyLocationButtonEnabled(true);設置默認定位按鈕是否顯示,非必需設置。 aMap.setMyLocationEnabled(true);// 設置爲true表示啓動顯示定位藍點,false表示隱藏定位藍點並不進行定位,默認是false。
定位藍點提供8種模式:ide
myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_SHOW);//只定位一次。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATE) ;//定位一次,且將視角移動到地圖中心點。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW) ;//連續定位、且將視角移動到地圖中心點,定位藍點跟隨設備移動。(1秒1次定位) myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE);//連續定位、且將視角移動到地圖中心點,地圖依照設備方向旋轉,定位點會跟隨設備移動。(1秒1次定位) myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,而且會跟隨設備移動。(1秒1次定位)默認執行此種模式。 //如下三種模式從5.1.0版本開始提供 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE_NO_CENTER);//連續定位、藍點不會移動到地圖中心點,定位點依照設備方向旋轉,而且藍點會跟隨設備移動。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//連續定位、藍點不會移動到地圖中心點,而且藍點會跟隨設備移動。 myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_MAP_ROTATE_NO_CENTER);//連續定位、藍點不會移動到地圖中心點
控制是否顯示定位藍點函數
//方法自5.1.0版本後支持 MyLocationStyle showMyLocation(boolean visible)
至於藍點的外觀設計能夠參考高德官網ui
初始化 aMap 對象,設置如下定位相關內容:this
// 設置定位監聽 aMap.setLocationSource(this); // 設置爲true表示顯示定位層並可觸發定位,false表示隱藏定位層並不可觸發定位,默認是false aMap.setMyLocationEnabled(true); // 設置定位的類型爲定位模式,有定位、跟隨或地圖根據面向方向旋轉幾種 aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
在aMap.setLocationSource(this)中包含兩個回調,activate(OnLocationChangedListener)和deactivate()。spa
在activate()中設置定位初始化及啓動定位,在deactivate()中寫中止定位的相關調用。設計
OnLocationChangedListener mListener; AMapLocationClient mlocationClient; AMapLocationClientOption mLocationOption; /** * 激活定位 */ @Override public void activate(OnLocationChangedListener listener) { mListener = listener; if (mlocationClient == null) { //初始化定位 mlocationClient = new AMapLocationClient(this); //初始化定位參數 mLocationOption = new AMapLocationClientOption(); //設置定位回調監聽 mlocationClient.setLocationListener(this); //設置爲高精度定位模式 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); //設置定位參數 mlocationClient.setLocationOption(mLocationOption); // 此方法爲每隔固定時間會發起一次定位請求,爲了減小電量消耗或網絡流量消耗, // 注意設置合適的定位時間的間隔(最小間隔支持爲2000ms),而且在合適時間調用stopLocation()方法來取消定位請求 // 在定位結束後,在合適的生命週期調用onDestroy()方法 // 在單次定位狀況下,定位不管成功與否,都無需調用stopLocation()方法移除請求,定位sdk內部會移除 mlocationClient.startLocation();//啓動定位 } } /** * 中止定位 */ @Override public void deactivate() { mListener = null; if (mlocationClient != null) { mlocationClient.stopLocation(); mlocationClient.onDestroy(); } mlocationClient = null; }
定位回調方法:onLocationChanged(AMapLocation amapLocation)。code
在回調方法中調用「mListener.onLocationChanged(amapLocation);」能夠在地圖上顯示系統小藍點。
/** * 定位成功後回調函數 */ @Override public void onLocationChanged(AMapLocation amapLocation) { if (mListener != null&&amapLocation != null) { if (amapLocation != null &&amapLocation.getErrorCode() == 0) { mListener.onLocationChanged(amapLocation);// 顯示系統小藍點 } else { String errText = "定位失敗," + amapLocation.getErrorCode()+ ": " + amapLocation.getErrorInfo(); Log.e("AmapErr",errText); } } }
注意:須要在系統 onDestroy() 方法中銷燬定位對象。
@Override protected void onDestroy() { super.onDestroy(); mapView.onDestroy(); if(null != mlocationClient){ mlocationClient.onDestroy(); } }
沒法定位:errInfo:KEY錯誤 請到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看錯誤碼說明,錯誤詳細信
緣由:SHA1碼改變,致使key失效
解決辦法:在報錯中找到SHA1碼,用該碼在高德官網上從新獲取Key