Android 联系人导入导出(VCard格式)
之前在Android Contact 導入導出 vcf格式(不依賴第三方庫)記錄了一下依賴Android sdk中的功能導入導出聯系人(第一次做java項目內容,有些地方的記錄是否正確,暫時我也不知道。。。),最終發現像聯系人分組之類的無法導出,所以就想還是自己去寫VCard文件
權當筆記記錄,我把我的工作順序也記錄一下
第一步是查資料,肯定是去官網(作為猿猴,必須自備梯子):
聯系人提供程序,這里有整體的介紹,我挨著看完的,看完這個也就有了整體的了解
比如聯系人的主要表結構,聯系人、原始聯系人的概念,聯系人數據的查詢等,文章還有相關的代碼片段
第二步是找查VCard的相關資料,首先是百度百科了解了大概,知道他是一個規范,他的結構和組織形式
最后去找了個第三方庫ez-vcard,這個是專門處理vCard的,個人感覺很好用,跟著他提供的例子走一波,發現就已經滿足了我個人的需求
比如電話郵件什么的直接提供了操作接口,也提供了接口操作vCard擴展類型
第三步就是寫測試代碼,根據一、二步寫了代碼,嘗試備份姓名、電話、郵件三種數據,然后嘗試了還原,當然寫的過程中都在查api文檔(Android sdk文檔我是下載到本地的,所以直接在Android studio中可以查看,沒下載我也不知道能不能。。。。)
ContactsContract.CommonDataKinds類定義了常規的聯系人信息,比如電話、郵件等
比如電話號碼:ContactsContract.CommonDataKinds.Phone
去看這個類文檔,類別名(Column aliases)節點中描述了相關列的定義
第四步就是做Demo,先做聯系人備份,想了一下代碼結構,因為ContactsContract.CommonDataKinds中的數據需求并未完全覆蓋,所以我想把ContactsContract.CommonDataKinds中定義的各種數據放在各自的類中來處理,于是我就定義了一個ContactVCardFillerAbstract的抽象類,提供一個fill接口,fill接口由子類實現,然后為了方便掛載、卸載Filler,我把Filler以鏈表的形式組織起來(有點像職責鏈)。在子類實現的過程中,所有的定義我是以Android的定義為準,如果ez-vcard不直接支持,就直接自定義類型,比如ContactsContract.CommonDataKinds.Im這種數據,可以這樣子自定義(根據規范,自定義必須以X-開頭)
第一種:
X-IM;TYPE=QQ:12345677
X-IM;TYPE=ICQ:96321587
第二種:
X-IM-QQ:12345677
X-IM-ICQ:96321587
第五步就是做聯系人還原,和備份類似,直接定義了一個VCardContactFillerAbstract,然后依次實現各個子類,寫完之后發現備份和還原的抽象類可以再次抽象成同一個,于是就寫成了ContentFillerAbstract
第六步就是再次查看代碼然后再改,發現因為Data表是一張縱表,同時也為了方便列擴充,所以定義了一個DataTable結構來存儲要方便很多(備份聯系人主要就是操作data表),
然后又定義了一個ContactVCardLabelMapping來做VCard類型和Contact數據的映射(起名成ContactVCardContacts感覺要比Mapping要好)
基本就做了這么多,此Demo就完成了
Demo 代碼(AndroidContactsBackUpRestoreVCardDemo?)
此Demo包含以下數據備份還原 聯系人姓名 聯系人頭像 聯系人的電話 聯系人的生日和周年紀念 備注信息 分組信息 聯系人的地址信息 聯系人的Email 聯系人的Company和Title信息 聯系人的Website; 聯系人使用的即時聊天(IM)轉載于:https://www.cnblogs.com/maoyuanwai/p/8298248.html
總結
以上是生活随笔為你收集整理的Android 联系人导入导出(VCard格式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python心得基础篇【1】入门篇
- 下一篇: (网页)parseFloat在工作中遇到