开发手记——基于XMPP的Android即时通讯APP(三)

首先祝各位读者新年快乐,博主在这里给大家拜万年啦!而且马上要到元宵节,顺祝大家元宵节快乐!

上一次谈了注册和登录的编码技巧,这一次我们来谈谈加好友的技巧。

【搜索用户】:

XMPP协议为我们提供了完善的好友查找功能,而且通过aSmack的库,能够轻易实现模糊查找功能。为了保证应用程序的通用性。在搜索时,我们最好按如下的方法做:

UserSearchManager usm = new UserSearchManager(xmppConnection);
Form searchForm = usm.getSearchForm("search." + xmppConnection.getServiceName());
Form answerForm = searchForm.createAnswerForm();
answerForm.setAnswer("Username", true);
answerForm.setAnswer("search", searchContent);
ReportedData data = usm.getSearchResults(answerForm, "search." + xmppConnection.getServiceName());
data.getRows();

注意:由于我们需要使用"search."+[服务器名]的字符串作为参数,以便让我们的应用更加通用。而xmppconnection对象提供了服务器名,因此,将上述参数设置为:

"search." + xmppConnection.getServiceName()

即可实现在任何xmpp服务器上进行用户查找的需求了。

【关于头像】:

由于我们的程序最终要运行在Android设备上,因此,要对内存进行较为细致的控制,以防内存溢出。我在程序中设置了头像的上传大小为200*200,80%的压缩质量,png格式。并将其放在数据库中作为blob类型字段保存,权当缓存了。当然,每次登陆后会和服务器联系获取最新的头像和好友信息。

关键的图片处理在此:

        /**
	 * 将制定路径下的图像文件转换为指定长宽的byte数据
	 *
	 * @param bitmapPath
	 * @param width
	 * @param height
	 * @return
	 */
	public static Bitmap resizeBitmap(String bitmapPath, int width, int height) {
		Options options = new Options();
		options.inJustDecodeBounds = true;
		BitmapFactory.decodeFile(bitmapPath, options);
		options.inSampleSize = calcSampleSize(options, width, height);
		options.inJustDecodeBounds = false;
		return BitmapFactory.decodeFile(bitmapPath, options);
	}

	// Bitmap转byte[]
	public static byte[] bitmapToBytes(Bitmap bitmap) {
		ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
		bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);
		return byteArrayOutputStream.toByteArray();
	}

	// 计算sampleSize
	private static int calcSampleSize(Options options, int width, int height) {
		int returnData = 1;
		if (options.outHeight > height || options.outWidth > width) {
			int heightRatio = Math.round((float) options.outHeight / (float) height);
			int widthRatio = Math.round((float) options.outWidth / (float) width);
			returnData = heightRatio > widthRatio ? heightRatio : widthRatio;
		}
		return returnData;
	}

最后提醒大家一句:别忘了在onDestroy()中recycle使用的Bitmap哟!另外,在读取用户VCard时,务必要记得优化图片的显示,否则,在PC端设置一张超大的图片作为头像,手机这边一登录没准直接就OOM了。

【数据库配置】:

这里提醒读者一句:所有存到数据库中的值一定要转码!一方面是为了数据安全,其实更多的另一方面是为了更好的程序健壮性。试想:如果一个账户的用户名是group、sort、order,直接傻眼了。

我的方法是仅仅取字符串的byte[],转换成了16进制,作为字符串存到数据库中。这样就避免了数据库操作报错崩溃的问题。当然,对于关键的聊天记录数据,也可以选择加密存储,然后解密查看。

【键盘优化】:

android:windowSoftInputMode="stateHidden|adjustResize"

把上述配置加至activity节点下,一方面可实现键盘出现时调整布局,另一方面是自动隐藏键盘。是个不错的用户体验,比默认的显示策略好很多。

时间: 2024-08-25 20:55:37

开发手记——基于XMPP的Android即时通讯APP(三)的相关文章

开发手记——基于XMPP的Android即时通讯APP(一)

2015年已经走过了一个月的光景,在一月份,分享了两套视频教程.我个人看过了其中一些,还是很不错的,就是讲课的老师语速慢了点,偶尔有点发困,不知看过的朋友会不会有同感,呵呵. 关于已经开始的XMPP即时通讯客户端实际上一直是想完成的一个项目,只是一直被工作所困扰,一直没得空.好在现在有点时间,就忙里偷闲了. 那么作为第一篇文章,自然是开发环境的搭建和开发的前期准备.或许代码量不多,或许文章内容还显得很稚嫩,所以欢迎各位前辈前来拍砖,我喜欢板砖! 首先是服务器部分: 这部分不会介绍太多,因为我们的

开发手记——基于XMPP的Android即时通讯APP(二)

隔了几天,把应用的登录.注册部分做的比较完善了,当然这只是个人感觉哈. 今天要说的,都是干货! 首先,没有大片代码:其次,在网上一般找不到:最后,真的让你节约开发时间!这也是为什么时隔好几天才会发第二篇连载. 既然说,没有大片代码,一般的登录.注册流程这里就不提了,百度谷歌一搜一大堆,而且基本都能用.这里说几点注意 [一]关于后台服务: 官方的建议,要使用"START_STICKY"这种类型的后台服务.为什么要用这种服务,官方的说法很明朗: 这点和Android Developer官网

放大招了!基于Bmob的Android即时通讯应用源码 (一)

今天给大家分享系列干货:基于Bmob的Android即时通讯应用源码.目前Android端已更新到V1.1.1版本.IOS端已推出V1.0.1版本. 以后将持续更新,分享源码!! 脚的好就多多回复 一.已实现功能: 1.支持好友管理功能,包括添加好友.删除好友.获取好友列表,也可以与你已有的用户系统完全解耦: 2.支持的消息类型:纯文本.聊天表情.图片.位置.语音: 3.支持会话的本地化存储: 4.自定义消息处理机制: 5.同一账号多处登陆强制下线: 6.支持消息回执发送:已发送.已阅读两种状态

放大招了!基于Bmob的Android即时通讯应用源码[升级版]

此帖为  放大招了!基于Bmob的Android即时通讯应用源码 (一) 续篇,主要是更新的功能. 一.更新更能: 1.新增支持陌生人聊天,允许发送给非好友用户: 2.新增支持自定义消息发送,便于开发者扩展: 3.新版本大幅度增加稳定性和及时性,保证百分百到达: 4.排除web后端推送对客户端的影响. 二.更新讲解: 1.如果你希望能和所有人(不局限于好友关系)进行聊天,那么这一版本就解决了这个问题. 如果你想看到效果,可以点击附近的人,你找到一个非好友用户,再查看他的资料,这一页面下方有个"发

.net平台 基于 XMPP协议的即时消息服务端简单实现

.net平台 基于 XMPP协议的即时消息服务端简单实现 昨天抽空学习了一下XMPP,在网上找了好久,中文的资料太少了所以做这个简单的例子,今天才完成.公司也正在准备开发基于XMPP协议的即时通讯工具所以也算是打一个基础吧!如果你还没有了解过XMPP请先阅读附录中链接的文章,本实例是基agsXMPP上开发的,agsXMPP是C#写的支持开源XMPP协议软件,我们可以在agsXMPP上快速构建自已的即时通讯平台,我的这个例子只是修改了服务器端,因为agsXMPP本身自带的服务器端没有实现聊天功能.

Android即时通讯服务,类似QQ的聊天工具,源码分享

Android即时通讯服务,类似QQ的聊天工具 基于bmob开发完成 下面有源码分享,敬请下载,多多支持回复 1.1      手机必须要有网络 1.2      手机必须要有SIM卡 1.3      手机必须要挂载有SDCAR 源码在此 链接: http://pan.baidu.com/s/1jGCIFsy 密码: 9eqc

源码提供!Android即时通讯和sns开源项目汇总

博客原地址: Android即时通讯和sns开源项目汇总 这是一个整理即时通讯(IM)和社交系统(SNS)优秀开源项目的文档,项目上传github欢迎提交更新. github地址:https://github.com/CameloeAnthony/Perfect_IM_SNS 一 即时通讯和社交系统平台 1 环信(推荐) 2 阿里百川 云旺 3 融云 4 OpenSNS -- #二 基于环信的即时通讯开源项目 数据整理自环信官网,网络数据和github.更多信息请参考环信官方网站和ImGeek

基于mina的的android即时通信app

前段时间研究mina框架,发现很适合做即时通信后台,经过几个月的研发本人开发了一套基于mina框架的android即时通信app,暂命名为E聊.鉴于本人能力有限还存在不少bug,希望大家原谅并指出,bug和部分功能还在不断完善中,过段时间部分代码会进行开源,敬请关注. 主要功能包括: 1.私聊,群聊 2.支持文字.语音.图片.文件.小视频等 3.位置共享(开发中) 4.朋友圈(图文发布.评论等,小视频功能正在开发中) 5.上线通知,断线重连 6.接收离线消息 7.更多功能正在筹划中... 演示图

Android即时通讯1

1.Openfire配置参考地址 http://blog.csdn.net/sky_monkey/article/details/9495571 2.Mysql navicate11.0.10破解补丁件下载路径 http://download.csdn.net/detail/long_sheng/6442857 3.XMPP Android 即时通讯参考材料阅读 http://blog.csdn.net/limb99/article/details/40435899 http://blog.cs