基於高德地圖的位置服務開發(二)

地圖定位藍點(5.0.0版本後)

效果以下:android

 

第一步,初始化 AMap 對象

初始化 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

 

地圖定位藍點(5.0.0版本前)

第一步,初始化地圖

初始化 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

相關文章
相關標籤/搜索