![【移动应用开发技术】在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)_第1页](http://file4.renrendoc.com/view/ae49380e41ff670115e54b89a293ff2b/ae49380e41ff670115e54b89a293ff2b1.gif)
![【移动应用开发技术】在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)_第2页](http://file4.renrendoc.com/view/ae49380e41ff670115e54b89a293ff2b/ae49380e41ff670115e54b89a293ff2b2.gif)
![【移动应用开发技术】在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)_第3页](http://file4.renrendoc.com/view/ae49380e41ff670115e54b89a293ff2b/ae49380e41ff670115e54b89a293ff2b3.gif)
![【移动应用开发技术】在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)_第4页](http://file4.renrendoc.com/view/ae49380e41ff670115e54b89a293ff2b/ae49380e41ff670115e54b89a293ff2b4.gif)
![【移动应用开发技术】在 Android 的 IM 应用中使用 asmack 库实现用户头像的传输(基于VCard协议)_第5页](http://file4.renrendoc.com/view/ae49380e41ff670115e54b89a293ff2b/ae49380e41ff670115e54b89a293ff2b5.gif)
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】在Android的IM应用中使用asmack库实现用户头像的传输(基于VCard协议)
根据XMPP的XEP标准协议规范,实现avatar头像传输与存储的功能主要有三种实现方式,分别对应于协议规范:
+【XEP-0153】vCard-BasedAvatars
/extensions/xep-0153.html
+【XEP-0084】UserAvatar
/extensions/xep-0084.html
+【XEP-0008】IQ-BasedAvatars
/extensions/xep-0008.html其中
+XEP-0153是通过将avatar头像存储在vcard的XML报文中实现的,这个也是openfire和spark中支持的方式;在openfire中的vcard的实现都在org.jivesoftware.openfire.vcard包中,其中:
-用户的vcard的存储实现在类DefaultVCardProvider中处理了vcard的查询,删除,更新,新增等DB操作;
-在VCardManager中实现对vcard的缓存与管理(包括新增,删除,更新,以及查询);这种实现方式比较直接,在服务端就是将用户的vcard(XML格式)信息一起存储在表(ofVcard)中,示例:<vCard
xmlns="vcard-temp">
<N>
<FAMILY/>
<GIVEN/>
<MIDDLE/>
</N>
<ORG>
<ORGNAME/>
<ORGUNIT/>
</ORG>
<FN/>
<URL/>
<TITLE/>
<NICKNAME/><PHOTO><TYPE>p_w_picpath/jpeg</TYPE><BINVAL>/9j/4AAQSkZJRgABAQEAYABgAADYlFFFM4T//2Q==</BINVAL></PHOTO>
<EMAIL>
<HOME/>
<INTERNET/>
<PREF/>
<USERID/>
</EMAIL>
<TEL><PAGER/><WORK/><NUMBER/>
</TEL>
<TEL><CELL/><WORK/><NUMBER/>
</TEL>
<TEL><VOICE/><WORK/><NUMBER/>
</TEL>
<TEL><FAX/><WORK/><NUMBER/>
</TEL>
<TEL><PAGER/><HOME/><NUMBER/>
</TEL>
<TEL><CELL/><HOME/><NUMBER/>
</TEL>
<TEL><VOICE/><HOME/><NUMBER/>
</TEL>
<TEL><FAX/><HOME/><NUMBER/>
</TEL>
<ADR><WORK/><PCODE/>
<REGION/>
<STREET/>
<CTRY/>
<LOCALITY/>
</ADR>
<ADR><HOME/><PCODE/>
<REGION/>
<STREET/>
<CTRY/>
<LOCALITY/>
</ADR>
</vCard>
+XEP-0008的IQ-BasedAvatars实现方式现在已不被推荐,用官方协议来说:WARNING:Considerationofthisdocument
hasbeenDeferredbytheXMPPStandardsFoundation.Implementationofthe
protocoldescribedhereinisnotrecommended
+XEP-0084UserAvatar是通过基于pubsub协议的基础上实现用户头像的发布(publish)与其他用户的订阅(subscribe);这也是beem的实现方式(beem中也提供了直接通过url的方式下载头像);在UserAvatar的协议中定义了两个pubsub节点,分别为:
-metadata节点:主要包括avatar的状态信息;
-data节点:就是avatar的数据;该协议也指出可以通过HTTP协议方式访问avatar的存储;按照官方协议说法,该协议的实现方式可能要替代其他两种实现方式:
ItisintendedthatthisspecificationwillsupersedebothIQ-BasedAvatars[6]andvCard-BasedAvatars[7]oncethePEPsubsetofXMPPpublish-subscribeisimplementedanddeployedwidelyenough.针对useravatar方式的实现,针对publisher与subscriber至少需要完成如下功能:
-Publishingavatardata
-Updatingmetadataaboutthecurrentavatar
-Disablingavatars
-Discoveringavataravailability
-Receivingnotificationofavatarchanges
-Retrievingavatardataviapubsub
-RetrievingavatardataviaHTTP上面只是对实现avatar相关XEP协议做一个初步的了解,我这里的实例仍然“偷懒”采用了VCard方式实现。协议参考:/extensions/xep-0054.htmlSmack中的VCardAPI参考:/builds/smack/docs/latest/javadoc/1,设置用户blue的VCard中的头像avatar信息:a)首先确认ProviderManager已经加入vcard-temp,如下代码:ProviderManagerpm=
ProviderManager.getInstance();
//PrivateDataStorage
pm.addIQProvider("query","jabber:iq:private",new
PrivateDataManager.PrivateDataIQProvider());
//RosterExchange
pm.addExtensionProvider("x","jabber:x:roster",
newRosterExchangeProvider());
//MessageEvents
pm.addExtensionProvider("x","jabber:x:event",new
MessageEventProvider());
//DelayedDelivery
pm.addExtensionProvider("x","jabber:x:delay",new
DelayInformationProvider());
//Version
try{
pm.addIQProvider("query","jabber:iq:version",
Class.forName("org.jivesoftware.smackx.packet.Version"));
}catch(ClassNotFoundExceptione){
//Notsurewhat'shappening
here.
}//
VCardpm.addIQProvider("vCard",
"vcard-temp",newVCardProvider());
//OfflineMessageRequests
pm.addIQProvider("offline",
"/protocol/offline",new
OfflineMessageRequest.Provider());b)设置用户选择的头像(其中还附带演示了设置用户blue的其他信息,如FirstName,LastName,以及NickName),如下示例代码:
publicclassSetVCardTaskextendsAsyncTask<Uri,Integer,Long>
{
@Override
protectedLongdoInBackground(Uri...params)
{
if(params.length<1){
returnLong.valueOf(-1);
}
UriuriFile=params[0];//需要传输的头像文件
ByteArrayOutputStreambaos=new
ByteArrayOutputStream();
FileInputStreamfis;
try
{
String[]proj={
MediaStore.Images.Media.DATA};
Cursoractualp_w_picpathcursor=
managedQuery(uriFile,proj,null,null,null);
intactual_p_w_picpath_column_index
=
actualp_w_picpathcursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
actualp_w_picpathcursor.moveToFirst();
StringfilePath=
actualp_w_picpathcursor.getString(actual_p_w_picpath_column_index);
fis=newFileInputStream(new
File(filePath));
byte[]buf=newbyte[1024];
intn;
while(-1!=(n=
fis.read(buf)))
{
baos.write(buf,0,n);
}
}
catch(Exceptione)
{
e.printStackTrace();
}
byte[]bbytes=
baos.toByteArray();//设置和更新用户信息VCardvCard=newVCard();
vCard.setFirstName("Steven");
vCard.setLastName("Hu");
vCard.setNickName("安静的疯子");vCard.setAvatar(bbytes);
try
{
vCard.save(MainHelloIM.getInstance().getConnection());
}
catch(XMPPExceptione)
{
e.printStackTrace();
}
returnLong.valueOf(0);
}
}c)最终在服务端的数据库中可以看到如下数据(其中可以看到用户昵称也都设置成功了):d)通过spark登录成功后,可以看到头像已经更新如下:
2,查看用户blue的VCard信息a)首先确认ProviderManager已经加入vcard-temp,同上;b)采用异步任务来获取用户blue的VCard信息中的昵称
publicclassGetVCardTaskextend
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 文学社组社方案及招生简章范文
- 现代企业财务管理的全球化视角
- 全钢爬架施工方案
- 汽车行业的品牌竞争战略分析
- 国庆节小吃店铺活动方案
- 国庆节手工干货活动方案
- 12《富起来到强起来》第一课时说课稿-2023-2024学年道德与法治五年级下册统编版001
- 2023六年级英语上册 Unit 3 Winter in canada Lesson 14 Snow!It's Winter说课稿 冀教版(三起)
- 2024-2025学年新教材高中物理 第三章 恒定电流 第3节 测量金属丝的电阻率说课稿 粤教版必修3
- 2024秋七年级数学上册 第3章 一次方程与方程组3.4 二元一次方程组的应用 2列二元一次方程组解实际应用(一)说课稿(新版)沪科版
- 2025-2030年中国电动高尔夫球车市场运行状况及未来发展趋势分析报告
- 河南省濮阳市2024-2025学年高一上学期1月期末考试语文试题(含答案)
- 2024年湖南高速铁路职业技术学院单招职业适应性测试题库及答案解析
- 安全事故案例图片(76张)课件
- 预应力锚索施工方案
- 豇豆生产技术规程
- 奢侈品管理概论完整版教学课件全书电子讲义(最新)
- 文艺美学课件
- 中药炮制学教材
- 常见肿瘤AJCC分期手册第八版(中文版)
- 电气第一种第二种工作票讲解pptx课件
评论
0/150
提交评论