android高德地圖api,定位成功後修改定位時間間隔

直接上代碼

 //    初始化定位設置
    private void initLocation() {
        if (myLocationStyle == null) {
            myLocationStyle = new MyLocationStyle();//初始化定位藍點樣式類myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE);//連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,並且會跟隨設備移動。(1秒1次定位)如果不設置myLocationType,默認也會執行此種模式。
        }
        // TODO: 2018/10/17 默認時間間隔爲2秒
        myLocationStyle.interval(2000); //設置連續定位模式下的定位間隔,只在連續定位模式下生效,單次定位模式下不會生效。單位爲毫秒。
        myLocationStyle.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);//連續定位、藍點不會移動到地圖中心點,並且藍點會跟隨設備移動。
        myLocationStyle.showMyLocation(false);//設置是否顯示定位小藍點,用於滿足只想使用定位,不想使用定位小藍點的場景,設置false以後圖面上不再有定位藍點的概念,但是會持續回調位置信息。
//        myLocationStyle.myLocationIcon(BitmapDescriptor.)  // //設置定位藍點的icon圖標方法,需要用到BitmapDescriptor類對象作爲參數。
//        MyLocationStyle anchor(float u, float v);//設置定位藍點圖標的錨點方法。
//        MyLocationStyle strokeColor(int color);//設置定位藍點精度圓圈的邊框顏色的方法。
//        MyLocationStyle radiusFillColor(int color);//設置定位藍點精度圓圈的填充顏色的方法。
//        MyLocationStyle strokeWidth(float width);//設置定位藍點精度圈的邊框寬度的方法。

        aMap.setMyLocationStyle(myLocationStyle);//設置定位藍點的Style
//aMap.getUiSettings().setMyLocationButtonEnabled(true);設置默認定位按鈕是否顯示,非必需設置。
        aMap.setMyLocationEnabled(true);// 設置爲true表示啓動顯示定位藍點,false表示隱藏定位藍點並不進行定位,默認是false。


//        實現 AMap.OnMyLocationChangeListener 監聽器,通過如下回調方法獲取經緯度信息:
        aMap.setOnMyLocationChangeListener(new AMap.OnMyLocationChangeListener() {
            @Override
            public void onMyLocationChange(Location location) {

                Log.e(TAG, "onMyLocationChange: 實際的時間間隔  " + aMap.getMyLocationStyle().getInterval());

//                處理定位結果
                if (location != null) {
//                    定位成功,修改時間間隔
                    if (aMap.getMyLocationStyle().getInterval() != timeInterval) {
                        MyLocationStyle style = new MyLocationStyle();
                        style.interval(timeInterval);
                        style.myLocationType(MyLocationStyle.LOCATION_TYPE_FOLLOW_NO_CENTER);
                        myLocationStyle.showMyLocation(false);
                        aMap.setMyLocationStyle(style);
                        **aMap.setMyLocationEnabled(true); // 執行這行代碼,上面的設置纔有效**
                    }

                    amapLocation = new AMapLocation(location);

                    Log.e(TAG, "onMyLocationChange: 定位成功   =---------------");
                    aMap.clear();
                    aMap.addMarker(new MarkerOptions()
                                    .position(new LatLng(amapLocation.getLatitude(), amapLocation.getLongitude())).
                                            icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory
                                                    .decodeResource(getResources(), R.mipmap.icon_marker_location)))
                                    .draggable(true)
//                .zIndex(i)
                    );

                    //                定位成功-拉取周邊車的位置信息
                    isLoading = true;
                    presenter.getSystemCarList(dao, cpId, amapLocation.getLongitude() + "", amapLocation.getLatitude() + "", "", null, 0, 0, 0);
                } else {
                    Log.e(TAG, "onMyLocationChange: 定位失敗");
                }
            }
        });

    }

高德地圖api定位文檔:
https://lbs.amap.com/api/android-sdk/guide/create-map/mylocation#location-marker-5-0

顯示定位藍點
最後更新時間: 2018年01月02日
定位藍點指的是進入地圖後顯示當前位置點的功能。自Android 3D地圖 SDK 5.0.0版本之後定位藍點實現無需依賴 Android 定位 SDK ,5.0.0 版本之前需要引入地圖 SDK 和定位 SDK 到工程中。效果如下:

效果如下:

實現定位藍點(5.0.0版本後)
第一步,初始化 AMap 對象
初始化 AMap 對象內容在顯示地圖章節中有詳細講解。

第二步,實現定位藍點
實現定位藍點:

Java
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種模式:

Java
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);//連續定位、藍點不會移動到地圖中心點,地圖依照設備方向旋轉,並且藍點會跟隨設備移動。
是否顯示定位藍點
控制是否顯示定位藍點

Java
//方法自5.1.0版本後支持
MyLocationStyle showMyLocation(boolean visible)//設置是否顯示定位小藍點,用於滿足只想使用定位,不想使用定位小藍點的場景,設置false以後圖面上不再有定位藍點的概念,但是會持續回調位置信息。
自定義定位藍點圖標:
定位藍點圖標自定義:

Java
MyLocationStyle myLocationIcon(BitmapDescriptor myLocationIcon);//設置定位藍點的icon圖標方法,需要用到BitmapDescriptor類對象作爲參數。
自定義定位藍點圖標的錨點:
錨點是指定位藍點圖標像素與定位藍點座標的關聯點,例如需要將圖標的左下方像素點與定位藍點的經緯度關聯在一起,通過如下方法傳入(0.0,1.0)。圖標左上點爲像素原點。

Java
MyLocationStyle anchor(float u, float v);//設置定位藍點圖標的錨點方法。
精度圓圈的自定義:
精度圈顏色自定義方法如下

Java
MyLocationStyle strokeColor(int color);//設置定位藍點精度圓圈的邊框顏色的方法。
MyLocationStyle radiusFillColor(int color);//設置定位藍點精度圓圈的填充顏色的方法。
精度圈邊框寬度自定義方法如下

Java
MyLocationStyle strokeWidth(float width);//設置定位藍點精度圈的邊框寬度的方法。
定位的頻次自定義:
定位頻次修改只會在定位藍點的連續定位模式下生效,定位藍點支持連續定位的模式是:

Java
MyLocationStyle.LOCATION_TYPE_FOLLOW ;//連續定位、且將視角移動到地圖中心點,定位藍點跟隨設備移動。(默認1秒1次定位)
MyLocationStyle.LOCATION_TYPE_MAP_ROTATE;//連續定位、且將視角移動到地圖中心點,地圖依照設備方向旋轉,定位點會跟隨設備移動。(默認1秒1次定位)
MyLocationStyle.LOCATION_TYPE_LOCATION_ROTATE;//連續定位、且將視角移動到地圖中心點,定位點依照設備方向旋轉,並且會跟隨設備移動。(默認1秒1次定位)默認執行此種模式。
調整定位頻次的方法如下:

Java
MyLocationStyle interval(long interval);//設置定位頻次方法,單位:毫秒,默認值:1000毫秒,如果傳小於1000的任何值將按照1000計算。該方法只會作用在會執行連續定位的工作模式上。
獲取經緯度信息:
實現 AMap.OnMyLocationChangeListener 監聽器,通過如下回調方法獲取經緯度信息:

Java
public void onMyLocationChange(android.location.Location location){
//從location對象中獲取經緯度信息,地址描述信息,建議拿到位置之後調用逆地理編碼接口獲取(獲取地址描述數據章節有介紹)
}
實現定位藍點(5.0.0版本前)
第一步,初始化地圖
初始化 aMap 對象,設置以下定位相關內容:

Java
// 設置定位監聽
aMap.setLocationSource(this);
// 設置爲true表示顯示定位層並可觸發定位,false表示隱藏定位層並不可觸發定位,默認是false
aMap.setMyLocationEnabled(true);
// 設置定位的類型爲定位模式,有定位、跟隨或地圖根據面向方向旋轉幾種
aMap.setMyLocationType(AMap.LOCATION_TYPE_LOCATE);
第二步,初始化定位
在aMap.setLocationSource(this)中包含兩個回調,activate(OnLocationChangedListener)和deactivate()。

在activate()中設置定位初始化及啓動定位,在deactivate()中寫停止定位的相關調用。

Java
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)。

在回調方法中調用“mListener.onLocationChanged(amapLocation);”可以在地圖上顯示系統小藍點。

Java
/**

  • 定位成功後回調函數
    */
    @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() 方法中銷燬定位對象。

Java
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
if(null != mlocationClient){
mlocationClient.onDestroy();
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章