【移動(dòng)應(yīng)用開發(fā)技術(shù)】在 Android 的 IM 應(yīng)用中使用 asmack 庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)_第1頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】在 Android 的 IM 應(yīng)用中使用 asmack 庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)_第2頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】在 Android 的 IM 應(yīng)用中使用 asmack 庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)_第3頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】在 Android 的 IM 應(yīng)用中使用 asmack 庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)_第4頁
【移動(dòng)應(yīng)用開發(fā)技術(shù)】在 Android 的 IM 應(yīng)用中使用 asmack 庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

【移動(dòng)應(yīng)用開發(fā)技術(shù)】在Android的IM應(yīng)用中使用asmack庫(kù)實(shí)現(xiàn)用戶頭像的傳輸(基于VCard協(xié)議)

根據(jù)XMPP的XEP標(biāo)準(zhǔn)協(xié)議規(guī)范,實(shí)現(xiàn)avatar頭像傳輸與存儲(chǔ)的功能主要有三種實(shí)現(xiàn)方式,分別對(duì)應(yīng)于協(xié)議規(guī)范:

+【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頭像存儲(chǔ)在vcard的XML報(bào)文中實(shí)現(xiàn)的,這個(gè)也是openfire和spark中支持的方式;在openfire中的vcard的實(shí)現(xiàn)都在org.jivesoftware.openfire.vcard包中,其中:

-用戶的vcard的存儲(chǔ)實(shí)現(xiàn)在類DefaultVCardProvider中處理了vcard的查詢,刪除,更新,新增等DB操作;

-在VCardManager中實(shí)現(xiàn)對(duì)vcard的緩存與管理(包括新增,刪除,更新,以及查詢);這種實(shí)現(xiàn)方式比較直接,在服務(wù)端就是將用戶的vcard(XML格式)信息一起存儲(chǔ)在表(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實(shí)現(xiàn)方式現(xiàn)在已不被推薦,用官方協(xié)議來說:WARNING:Considerationofthisdocument

hasbeenDeferredbytheXMPPStandardsFoundation.Implementationofthe

protocoldescribedhereinisnotrecommended

+XEP-0084UserAvatar是通過基于pubsub協(xié)議的基礎(chǔ)上實(shí)現(xiàn)用戶頭像的發(fā)布(publish)與其他用戶的訂閱(subscribe);這也是beem的實(shí)現(xiàn)方式(beem中也提供了直接通過url的方式下載頭像);在UserAvatar的協(xié)議中定義了兩個(gè)pubsub節(jié)點(diǎn),分別為:

-metadata節(jié)點(diǎn):主要包括avatar的狀態(tài)信息;

-data節(jié)點(diǎn):就是avatar的數(shù)據(jù);該協(xié)議也指出可以通過HTTP協(xié)議方式訪問avatar的存儲(chǔ);按照官方協(xié)議說法,該協(xié)議的實(shí)現(xiàn)方式可能要替代其他兩種實(shí)現(xiàn)方式:

ItisintendedthatthisspecificationwillsupersedebothIQ-BasedAvatars[6]andvCard-BasedAvatars[7]oncethePEPsubsetofXMPPpublish-subscribeisimplementedanddeployedwidelyenough.針對(duì)useravatar方式的實(shí)現(xiàn),針對(duì)publisher與subscriber至少需要完成如下功能:

-Publishingavatardata

-Updatingmetadataaboutthecurrentavatar

-Disablingavatars

-Discoveringavataravailability

-Receivingnotificationofavatarchanges

-Retrievingavatardataviapubsub

-RetrievingavatardataviaHTTP上面只是對(duì)實(shí)現(xiàn)avatar相關(guān)XEP協(xié)議做一個(gè)初步的了解,我這里的實(shí)例仍然“偷懶”采用了VCard方式實(shí)現(xiàn)。協(xié)議參考:/extensions/xep-0054.htmlSmack中的VCardAPI參考:/builds/smack/docs/latest/javadoc/1,設(shè)置用戶blue的VCard中的頭像avatar信息:a)首先確認(rèn)ProviderManager已經(jīng)加入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)設(shè)置用戶選擇的頭像(其中還附帶演示了設(shè)置用戶blue的其他信息,如FirstName,LastName,以及NickName),如下示例代碼:

publicclassSetVCardTaskextendsAsyncTask<Uri,Integer,Long>

{

@Override

protectedLongdoInBackground(Uri...params)

{

if(params.length<1){

returnLong.valueOf(-1);

}

UriuriFile=params[0];//需要傳輸?shù)念^像文件

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();//設(shè)置和更新用戶信息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)最終在服務(wù)端的數(shù)據(jù)庫(kù)中可以看到如下數(shù)據(jù)(其中可以看到用戶昵稱也都設(shè)置成功了):d)通過spark登錄成功后,可以看到頭像已經(jīng)更新如下:

2,查看用戶blue的VCard信息a)首先確認(rèn)ProviderManager已經(jīng)加入vcard-temp,同上;b)采用異步任務(wù)來獲取用戶blue的VCard信息中的昵稱

publicclassGetVCardTaskextend

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論