截图1:
截图2:
截图3:
截图4:
截图5:
截图6:
截图7:
截图8:
截图9:
基于原有蘑菇街TeamTalk项目,界面修改为蓝色扁平基调,头像为圆形头像
聊天底层的通信,由原有TCP(基于netty框架)+protobuf,改为UDP(UDT库)+protobuf.
- UDT库是基于UDP协议的数据传输的C++库,支持海量数据传输,保证了发送报文的时序性。
- 本项目采用Android推荐方式 Cmake,编译C++源码成udt.so,通过JNi,使java代码方便调用UDT的接口。
- 发送报文使用protobuf。其和json,xml一样,进行网络传输的一种数据序列化标准,谷歌出品,值得信赖,灵活高效,可以跨平台。感兴趣的盆友了解一下。
- 考虑到udp接收报文太大的时候(比如语音,文件)会自动分包,将收到的包保存到队列中,再重新组成完整的序列包。
- cpp源码路径:app\src\main\cpp\libudt,具体编译配置参见目录下的CmakeList
- java代码路径:app\src\main\java\com\cooyet\im\imservice\manager\IMUdtManager.java
- 语音对讲类路径:app\src\main\java\com\cooyet\im\imservice\manager\talk
- 语音对讲界面见截图9
- 功能说明:
- - UI交互参照微信,用户A请求对讲,用户B接收对讲;
- - 用户A讲话时,用户B不能讲话;
- - 整个请求-接收-对讲-挂断流程通过UDT通信;
- - 语音采集暂时用PCM格式数据,一种未做编解码的原始语音数据,便于以后对声音的处理;
- - 聊天界面使用WindowManager显示,可以在应用任意界面接收语音请求;
- - 接收语音的字节采用双缓冲机制,一定程度避免接收字节的不连续,网络延迟造成对语音质量造成的影响。
-
态势具体类路径:app\src\main\java\com\cooyet\im\ui\fragment\StateFragment.java
-
态势界面见截图5.
-
功能说明:
-
手动触摸地图,可以标记车,人。,在画笔的状态下,可以画出红色轨迹。
-
点击发送,屏幕上位置坐标转换为经纬度坐标,发送给好友。(暂未实现)
-
缓存屏幕标记到本地,下次进入应用可以显示上一次的标记
-
发送位置类路径:app\src\main\java\com\cooyet\im\ui\activity\LocationPickerActivity.java
-
发送位置界面见截图8.
-
功能说明
-
UI交互参照微信,使用高德地图热点搜索功能。
-
发送暂时以图片方式发送(把当前地图截图,对此图片添加附带经纬度信息,使接收方判断是否是发送位置信息还是正常发送的图片)
注:项目基于TeamTalk的二次开发,需要搭建服务器才能登陆。若你也涉及到了以上的功能点,若有疑问,欢迎添加微信(danxinzhicheng)交流。