在上篇博文(Baidu Map 周边雷达)中,我们实现了周边APP的扫描。本文将在此基础上,进一步尝试添加群发消息功能。
但本文是一失败的案例!若有同学想要开发基于地图的社交功能,可以下课了~失败原因在于,InfoWindow一次只能显示一个!这显然不能满足群聊的要求。之所以将此博文写下,也是想见证学习过程,以及摔过的巨坑!
功能需求如下:
消息发送后,对应marker上将出现信息内容窗口。消息对周围所有人可见。
我们将借助RadarUploadInfo对象中的Comments变量,来存储要发送的消息内容。通过上传定位信息的方法,将消息发送出去。
当其他用户使用雷达时,将会检索到该定位信息。App再根据RadarNearbyInfo对象中有无Comments,创建InfoWindow,用以显示消息内容。
关于RadarUploadInfo对象和RadarNearbyInfo对象,在之前的博文(Baidu Map 周边雷达)中有提及,此处不再详细介绍。
基本思路有了,接下来分两部分实现上述功能。
(一)消息的发送
采用定位信息单次上传模式。
RadarUploadInfo info = new RadarUploadInfo();
info.comments = "My Msg is Hello Baidu Map";
//m_CurrentLocation 为当前定位信息
info.pt = new LatLng(m_CurrentLocation.getLatitude(),m_CurrentLocation.getLongitude());
//m_RadarManager为RadarSearchManager对象
m_RadarManager.uploadInfoRequest(info);
(二)信息窗口的显示
信息的显示采用InfoWindow对象完成。
InfoWindow提供了两种构造方法。
方法一:仅显示一个图标,并通过实现Clicklistener,完成自定义操作。
InfoWindow(BitmapDescriptor bd, LatLng position, int yOffset, InfoWindow.OnInfoWindowClickListener listener)
本例使用的是第二种方法。
方法二:自定义显示窗口,需要创建View对象,并传入该对象。
InfoWindow(View view, LatLng position, int yOffset)
用例如下:
TextView textView = new TextView(getApplicationContext());
textView.setBackgroundResource(R.drawable.chat);
textView.setPadding(30, 20, 30, 50);
textView.setText(Info.comments);
infoWindow =new InfoWindow(textView,Info.pt,DEFAULT_INFO_WINDOW_Y_OFFSET);
m_Map.showInfoWindow(infoWindow);
效果显示如下:
此后,发现巨坑。InfoWindow只能显示一个。因此无法在Map显示所有用户发送的消息。
至此,信息交互尝试失败。
*转换思路:
marker可以显示多个,可尝试将消息文本转换为图片,作为marker的Image显示。*
尝试后再做记录。