更新时间:2020-06-23
本章节将对各类监听事件做介绍,key验证时间监听、广播监听、地图事件监听(地图状态改变、各种手势、截屏)等。
key验证事件监听
SDK初始化时会自动掉调用Manifest中添加的开发密钥进行鉴权,鉴权结果以广播的形式回馈,开发者可以监听相关广播并作出处理。使用方法如下:
1Manifest.xml
<application> android:name="baidumapsdk.demo.DemoApplication" <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发密钥" /> </application>
2定义广播监听器类
public class SDKReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) { //key验证失败,做相应处理 } else if (action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) { //key验证成功,做相应处理 } } }
3注册广播
IntentFilter iFilter = new IntentFilter(); iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR); iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK); mReceiver = new SDKReceiver(); registerReceiver(mReceiver, iFilter);
4取消注册
unregisterReceiver(mReceiver);
地图事件监听
SDK定义了各种地图相关事件的监听,提供相应的事件监听方法,包括地图状态的改变、手势事件、地图渲染、地图截屏事件等。如下所示:
地图状态改变接口:
OnMapStatusChangeListener listener = new OnMapStatusChangeListener() { BaiduMap.OnMapStatusChangeListener listener = new BaiduMap.OnMapStatusChangeListener() { /** * 手势操作地图,设置地图状态等操作导致地图状态开始改变。 * * @param status 地图状态改变开始时的地图状态 */ @Override public void onMapStatusChangeStart(MapStatus status) { } /** * 手势操作地图,设置地图状态等操作导致地图状态开始改变。 * * @param status 地图状态改变开始时的地图状态 * * @param reason 地图状态改变的原因 */ //用户手势触发导致的地图状态改变,比如双击、拖拽、滑动底图 //int REASON_GESTURE = 1; //SDK导致的地图状态改变, 比如点击缩放控件、指南针图标 //int REASON_API_ANIMATION = 2; //开发者调用,导致的地图状态改变 //int REASON_DEVELOPER_ANIMATION = 3; @Override public void onMapStatusChangeStart(MapStatus status, int reason) { } /** * 地图状态变化中 * * @param status 当前地图状态 */ @Override public void onMapStatusChange(MapStatus status) { } /** * 地图状态改变结束 * * @param status 地图状态改变结束后的地图状态 */ @Override public void onMapStatusChangeFinish(MapStatus status) { } }; //设置地图状态监听 mBaiduMap.setOnMapStatusChangeListener(listener);
地图单击事件监听接口:
BaiduMap.OnMapClickListener listener = new BaiduMap.OnMapClickListener() { /** * 地图单击事件回调函数 * * @param point 点击的地理坐标 */ @Override public void onMapClick(LatLng point) { } /** * 地图内 Poi 单击事件回调函数 * * @param mapPoi 点击的 poi 信息 */ @Override public void onMapPoiClick(MapPoi mapPoi) { } }; //设置地图单击事件监听 mBaiduMap.setOnMapClickListener(listener);
地图双击事件监听接口:
BaiduMap.OnMapDoubleClickListener listener = new BaiduMap.OnMapDoubleClickListener() { /** * 地图双击事件监听回调函数 * * @param point 双击的地理坐标 */ @Override public void onMapDoubleClick(LatLng point) { } }; //设置地图双击事件监听 mBaiduMap.setOnMapDoubleClickListener(listener);
地图长按事件监听接口:
BaiduMap.OnMapLongClickListener listener = new BaiduMap.OnMapLongClickListener() { /** * 地图长按事件监听回调函数 * * @param point 长按的地理坐标 */ @Override public void onMapLongClick(LatLng point) { } }; //设置地图长按事件监听 mBaiduMap.setOnMapLongClickListener(listener);
地图 Marker 覆盖物点击事件监听接口:
OnMarkerClickListener listener = new OnMarkerClickListener() { /** * 地图 Marker 覆盖物点击事件监听函数 * @param marker 被点击的 marker */ public boolean onMarkerClick(Marker marker){ } };
触摸地图回调接口:
BaiduMap.OnMapTouchListener listener = new BaiduMap.OnMapTouchListener() { /** * 当用户触摸地图时回调函数 * * @param motionEvent 触摸事件 */ @Override public void onTouch(MotionEvent motionEvent) { } }; //设置触摸地图事件监听者 mBaiduMap.setOnMapTouchListener(listener);
地图加载完成回调接口:
BaiduMap.OnMapLoadedCallback callback = new BaiduMap.OnMapLoadedCallback() { /** * 地图加载完成回调函数 */ @Override public void onMapLoaded() { } }; //设置地图加载完成回调 mBaiduMap.setOnMapLoadedCallback(callback);
地图渲染完成回调接口:
自4.1.0起,增加地图渲染完成的监听接口onMapRenderFinished(),每次对地图有操作时,绘制完成时调用。
BaiduMap.OnMapRenderCallback callback = new BaiduMap.OnMapRenderCallback() { /** * 地图渲染完成回调函数 */ @Override public void onMapRenderFinished() { } }; //设置地图渲染完成回调 mBaiduMap.setOnMapRenderCallbadk(callback);
地图截屏回调接口:
BaiduMap.SnapshotReadyCallback callback = new BaiduMap.SnapshotReadyCallback() { /** * 地图截屏回调接口 * * @param snapshot 截屏返回的 bitmap 数据 */ @Override public void onSnapshotReady(Bitmap snapshot) { } }; /** * 发起截图请求 * * @param callback 截图完成后的回调 */ mBaiduMap.snapshot(callback);
地图定位图标点击事件监听接口:
注意:确保开启定位图层
BaiduMap.OnMyLocationClickListener listener = new BaiduMap.OnMyLocationClickListener() { /** * 地图定位图标点击事件监听函数 */ @Override public boolean onMyLocationClick() { return false; } }; //设置定位图标点击事件监听 mBaiduMap.setOnMyLocationClickListener(listener);
对线和标注引入事件分发机制
自V4.1.0起,加入事件处理机制,对于Polyline和Marker的点击事件,开发者可以通过相关回调接口捕获处理。示例如下:
Marker点击事件接口:
BaiduMap.OnMarkerClickListener listener = new BaiduMap.OnMarkerClickListener() { /** * 地图 Marker 覆盖物点击事件监听函数 * @param marker 被点击的 marker */ @Override public boolean onMarkerClick(Marker marker) { return false;//是否捕获点击事件 } }; // 设置地图 Marker 覆盖物点击事件监听者,自3.4.0版本起可设置多个监听对象,停止监听时调用removeMarkerClickListener移除监听对象 mBaiduMap.setOnMarkerClickListener(listener); //停止监听时移除监听对象 mBaiduMap.removeMarkerClickListener(listener);
Polyline点击事件接口:
BaiduMap.OnPolylineClickListener listener = new BaiduMap.OnPolylineClickListener() { /** * 地图 Polyline 覆盖物点击事件监听函数 * * @param polyline 被点击的 polyline */ @Override public boolean onPolylineClick(Polyline polyline) { return false;//是否捕获点击事件 } }; //设置地图 Polyline 覆盖物点击事件监听 mBaiduMap.setOnPolylineClickListener(listener);
当开发者对上述点击不处理时,向下传递,等同于地图点击事件,可由OnMapClickListener捕获。