您的位置:首页 > 移动开发 > 微信开发

基于Bmob的仿微信即时聊天软件

2016-07-12 13:51 387 查看
好友模块:索引视图、搜索界面、好友请求界面

索引视图,以一个包含26个字母还有#的数组为数据源,获取控件的位置大小信息,根据这些信息使用canvas.drawText()绘制整个英文字母列表,重写onTouchEvent()方法,获取事件的Y坐标值根据这个高度判定是哪一个字母被选中,在这个View下定义一个接口作为回调函数,当字母变化时修改大字母,并且跳转到以该字母开头的第一个好友。

 


搜索界面:直接bmobUserManager.queryUserByName/queryUserByPage实现从Bmob服务端准确/模糊搜索,在其回调函数中完成数据载入adapter中,更新列表。点击添加后,调用BmobChatManager.getInstance(context).sendTagMessage()即可向服务器发送消息。



好友请求:查询Bmob保存在本地数据库,如果有好友申请信息就加载在adapter中,长按请求信息可以删除该信息,单击可以查看申请人的信息。添加则调用BmobUserManager.getInstance(context).agreeAddContact()方法,



聊天模块:包含主界面,单聊界面,输入栏(表情/语音/文本输入框/选择图片相机/发送位置)

主界面:这个界面主要就是列表,数据来源于本地数据库,记录下当前数据库的本ID对应的所有聊天,并且显示最近一条信息。



单聊界面:包含本ID和对方ID的所有聊天信息,数据来源是本地数据库,根据信息的发送方是不是本人、消息的类型来辨别消息在列表中的显示模式。在adapter中判断本人是不是发送方,是本人的信息就放置在右边,否则放置在左边,类型是语音/图片/文本/位置就用该类型的布局。语音信息通过url获取,播放语音同时播放动画。点击位置信息就让携带着经纬度intent跳转到LocationActivity。



输入栏:点击语音时,使用BmobRecordManager录制语音,当用户在语音按钮内松开就或超过60S就发送语音,当用户移到语音按钮外松开或录音时间不超过1S就取消发送。发送成功后使用saveReceiveMessage保存在本地数据库中。



点击emoji表情的时候,在文本框中输入emoji的代号,然后通过自己编写的一个emoji解析器,使用正则运算把emoji找出来,通过他的代号获取本地的图片放置在ImageSpan中,以这个ImageSpan为数据源配置一个SpannableString,将这个SpannableString加载入EditText中;



而其他的图库和相机则是发送隐式意图打开,通过onActivityResult接收其返回值。

 

Receiver: 包含有消息订阅者队列,用于区别程序是处于显示状态还是隐藏状态下的消息处理方法,有订阅者说明程序处于前台活动状态,没订阅者说明程序在后台被闲置状态。首先判断网络状态,没网时,当程序在显示状态就调用Bmob的事件监听类的onNetChange(false)方法。网络正常就解析json,判断消息的类型,再判断是否应该由这个用户接收信息,是则处理信息。信息类型分为5种:1.同一账号在不同设备上登陆,2.收到好友请求,3.被添加好友,4.发送的消息已被别人读取,5.聊天信息。处理各类型信息:1.有订阅者就执行订阅者的onOffline()方法,让其下线,没有订阅者则发送通知栏消息并通过MyApp.context.logOut()强制下线;2.首先把这个请求信息保存在本地数据库,有订阅者则执行订阅者的onAddUser()方法,没有则发送一个通知;3.首先检查一下本地内存中是否有这个好友,没有则向服务器发送同意请求(成功会自动保存在本地数据库),发送成功就把最新列表添加到本地内存;4.更新一下消息在本地数据库的状态(从已发送à已读);5.有订阅者就调用其onMessage()方法,没有就根据信息的类型(图片,位置,语音,普通文本)发送通知;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: