浏览器版本低!无法浏览完整内容,建议升级或更换浏览器。

Android 地图SDK

百度地图SDK是一套应用程序接口, 通过调用地图SDK接口,开发者可以轻松访问百度地图的服务和数据,构建功能丰富、交互性强的地图类应用程序。

本章节将对各类监听事件做介绍,key验证时间监听、广播监听、地图事件监听(地图状态改变、各种手势、截屏)等。
key验证事件监听

在工程Manifest中添加相应的开发密钥,SDK会自动去调用这个开发密钥,相应的鉴权状态将以广播的形式反馈给开发者。 具体使用方法如下所示: 开发密钥位置:

<application>
    android:name="baidumapsdk.demo.DemoApplication"  
    <meta-data  
        android:name="com.baidu.lbsapi.API_KEY"  
        android:value="开发密钥" />  
</application>

广播监听方法
1定义广播监听者
public class SDKReceiver extends BroadcastReceiver {  
    public void onReceive(Context context, Intent intent) {  
        String action = intent.getAction();  
        if(action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR))   
        {  
            // key 验证失败,相应处理  
        }  
    }  
}
2注册广播监听者
IntentFilter iFilter = new IntentFilter();

iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);  

iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);  

mReceiver = new SDKReceiver();  

registerReceiver(mReceiver, iFilter);
3不使用地图SDK时,取消广播监听
unregisterReceiver(mReceiver);
地图事件监听

百度地图支持各种事件监听,提供了相应的事件监听方法,具体监听接口如下:

地图状态改变相关接口:

包含手势、设置地图状态或其他某种操作导致地图状态开始改变,地图状态变化中、地图状态改变结束等监听方法。

OnMapStatusChangeListener listener = new OnMapStatusChangeListener() {  
    /** 
    * 手势操作地图,设置地图状态等操作导致地图状态开始改变。 
    * @param status 地图状态改变开始时的地图状态 
    */  
    public void onMapStatusChangeStart(MapStatus status){  
    }  

    /** 因某种操作导致地图状态开始改变。
    * @param status 地图状态改变开始时的地图状态 
    * @param reason表示地图状态改变的原因,取值有:
         * 1:用户手势触发导致的地图状态改变,比如双击、拖拽、滑动底图
         * 2:SDK导致的地图状态改变, 比如点击缩放控件、指南针图标
         * 3:开发者调用,导致的地图状态改变
    */ 
    public void onMapStatusChangeStart(MapStatus status, int reason);
    }

    /** 
    * 地图状态变化中 
    * @param status 当前地图状态 
    */  
    public void onMapStatusChange(MapStatus status){  
    }  

    /** 
    * 地图状态改变结束 
    * @param status 地图状态改变结束后的地图状态 
    */  
    public void onMapStatusChangeFinish(MapStatus status){  
    }
};

地图单击事件监听接口:

OnMapClickListener listener = new OnMapClickListener() {  
    /** 
    * 地图单击事件回调函数 
    * @param point 点击的地理坐标 
    */  
    public void onMapClick(LatLng point){  
    }  
    /** 
    * 地图内 Poi 单击事件回调函数 
    * @param poi 点击的 poi 信息 
    */  
    public boolean onMapPoiClick(MapPoi poi){  
    }  
};

地图加载完成回调接口:

OnMapLoadedCallback()是地图创建完成时回调.

OnMapLoadedCallback callback = new OnMapLoadedCallback() {  
    /** 
    * 地图加载完成回调函数 
    */  
    public void onMapLoaded(){  
    }  
};

地图渲染完成回调接口:

自4.1.0起,增加地图渲染完成的监听接口onMapRenderFinished(),每次对地图有操作时,绘制完成时调用。

    /**
     * 地图渲染完成回调接口
     */
    public interface OnMapRenderCallback {
        /**
         * 地图渲染完成回调函数
         */
        public void onMapRenderFinished();
    }
    /**
     * 设置地图渲染完成回调
     * @param callback
     */
    public void setOnMapRenderCallbadk(OnMapRenderCallback callback);

地图双击事件监听接口:

OnMapDoubleClickListener listener = new OnMapDoubleClickListener() {  
    /** 
    * 地图双击事件监听回调函数 
    * @param point 双击的地理坐标 
    */  
    public void onMapDoubleClick(LatLng point){  
    }  
};

地图长按事件监听接口:

OnMapLongClickListener listener = new OnMapLongClickListener() {  
    /** 
    * 地图长按事件监听回调函数 
    * @param point 长按的地理坐标 
    */  
    public void onMapLongClick(LatLng point){  
    }  
};

地图 Marker 覆盖物点击事件监听接口:

OnMarkerClickListener listener = new OnMarkerClickListener() {  
    /** 
    * 地图 Marker 覆盖物点击事件监听函数 
    * @param marker 被点击的 marker 
    */  
    public boolean onMarkerClick(Marker marker){  
    }  
};

地图定位图标点击事件监听接口:

OnMyLocationClickListener listener = new OnMyLocationClickListener() {  
    /** 
    * 地图定位图标点击事件监听函数 
    */  
    public boolean onMyLocationClick(){  
    }  
};

地图截屏回调接口:

SnapshotReadyCallback callback = new SnapshotReadyCallback() {  
    /** 
    * 地图截屏回调接口 
    * @param snapshot 截屏返回的 bitmap 数据 
    */  
    public void onSnapshotReady(Bitmap snapshot){  
    }  
};

触摸地图回调接口:

mBaiduMap.setOnMapTouchListener(new OnMapTouchListener() {
    /**
    * 当用户触摸地图时回调函数
    * @param event 触摸事件
    */
    public void onTouch(MotionEvent event) {
    }
});
对线和标注引入事件分发机制

自4.1.0起,引入事件分发机制,对于线polyline和marker的点击事件,当用户不处理时,向下传递,等同于地图点击事件。

原有的polyline点击事件,当开发者不设置监听时,该点击也无法由地图捕获。

现修改为:如果开发者设置了polyline点击事件监听OnPolylineClickListener,则polyline点击事件由开发者实现,响应接口:

    public boolean onPolylineClick(Polyline polyline); 

若开发者未设置该监听,则polyline点击事件向下传递,等同于地图点击事件,可由OnMapClickListener捕获。Marker的点击事件同理。