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

好友模块:索引视图、搜索界面、好友请求界面

索引视图,以一个包含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()方法,没有就根据信息的类型(图片,位置,语音,普通文本)发送通知;

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值