之前在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)

Android 联系人导入导出(VCard格式)的更多相关文章

  1. Android Contact 导入导出 vcf格式(不依赖第三方库)

    Android sdk 支持vcf处理的(忘记最低哪个版本开始支持的了,可以查一查) 备注:此代码来自Stack Overflow(原地址找不到了,o(╥﹏╥)o) 1. 导出联系人为vcf格式 Co ...

  2. 使用PHPExcel导入导出excel格式文件

    使用PHPExcel导入导出excel格式文件  作者:zccst  因为导出使用较多,以下是导出实现过程.  第一步,将PHPExcel的源码拷贝到项目的lib下  文件包含:PHPExcel.ph ...

  3. 完整代码:安卓小软件“CSV联系人导入导出工具”

    完整代码:安卓小软件"CSV联系人导入导出工具" 开发了一个安卓小软件"CSV联系人导入导出工具",欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗 ...

  4. 开发了一个安卓小软件“CSV联系人导入导出工具”,欢迎测试

    开发了一个安卓小软件"CSV联系人导入导出工具",欢迎测试.本软件可以帮你快速备份和恢复联系人,不用担心号码遗失,软件操作简单,使用方便. 下载地址: 百度网盘:https://p ...

  5. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

  6. Bash中使用MySQL导入导出CSV格式数据[转]

    转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下:   select * from test_inf ...

  7. oracle如何快速导入导出文本格式数据

    导出工具:sqluldr2工具说明:sqluldr2再以安装oracle客户端的环境下下无需再安装其它软件,只需将对应的软件包拷贝至对应目录,即可运行导出数据导出示例:--linux环境导出示例:/d ...

  8. mysql导入导出.csv格式数据

    window下导入数据: LOAD DATA INFILE "C:\\1.csv" REPLACE INTO TABLE demo CHARACTER SET gb2312 FIE ...

  9. VCF文件导入导出

    参考资料 通讯录导入导出vcf格式文件方法可参考: https://qiaodahai.com/android-iphone-mobile-phones-contacts-import-and-exp ...

随机推荐

  1. 【codeforces 758B】Blown Garland

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  2. [Angular] @ContentChildren and QueryList

    We have looked at @ContentChild in article(http://www.cnblogs.com/Answer1215/p/6414657.html). Now le ...

  3. erlang与c之间的连接

    http://blog.chinaunix.net/uid-22566367-id-382012.html erlang与c之间的连接参考资料:网络资料作者:Sunny    在Programming ...

  4. 详细回复某个CSDN网友,对我的文章和技术实力以及CSDN的吐槽

    貌似被大学生鄙视了,我也是醉了,现在的大学生水平和信心,都这么高了~ 看来,我得加把劲了~ o(︶︿︶)o 电子商务系列文章,是我闲来无事,分享自己的一些业余实践经验的文章.其中关于数据库设计的这一篇 ...

  5. findbugs静态代码分析工具使用教程

    FindBugs 是一个静态分析工具,很多程序猿都在使用,再次详细列出findbugs的使用教程,希望对大家有帮助. 1 安装 FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行 ...

  6. [GeekBand] C++ 内存分布—— new和delete重载的实现及分析

    本文参考文献:GeekBand课堂内容,授课老师:侯捷 :深度探索C++对象模型(侯捷译) :网络资料: http://www.leavesite.com/geekband-cpp-5.html ht ...

  7. js 时间日期函数

    忘记从哪里拷贝过来的了,侵删 Date.prototype.format = function (format) { var date = { "M+": this.getMont ...

  8. DirectX11学习笔记

    一.假定每种颜色的原始点是不同,表面的这样的原始颜色将被指定为每种颜色用线性内插值传授,这个被称为高洛德着色(Gouraud Shading).也称为平滑阴影: 二.三维图元:Direct3D中.使用 ...

  9. 面试问题:Vista与XP的Session 0与Session X的区别

    面试问题:Vista与XP的Session 0与Session X的区别 在XXXXX的一次面试中,笔试问题的题目曾提到Session 0.Session 1在Vista和Xp中的区别?现在把答案发上 ...

  10. MySQL 关键字和保留字

    ACCESSIBLE (R) ACCOUNT[a] ACTION ADD (R) AFTER AGAINST AGGREGATE ALGORITHM ALL (R) ALTER (R) ALWAYS[ ...