之前在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. uva 1519 - Dictionary Size(字典树)

    题目链接:uva 1519 - Dictionary Size 题目大意:给出n个字符串组成的字典.如今要加入新的单词,从已有单词中选出非空前缀和非空后缀,组成新单词. 问说能组成多少个单词. 解题思 ...

  2. Android Activity 悬浮 半透明边框

    1.首先来创建一个Activity,在Activity的OnCreate函数里面我们设置它为全屏,然后设置Activity的宽高为全屏*0.9,然后设置背景图片为半透明的 .9 图片 .这样就已经是非 ...

  3. 文件控制 fcntl函数具体解释

    摘要:本文主要讨论文件控制fcntl函数的基本应用.dup函数能够拷贝文件描写叙述符,而fcntl函数与dup函数有着异曲同工之妙.而且还有更加强大的功能,能够获取或设置已打开文件的性质,操作文件锁. ...

  4. 新一代Xamarin

    新一代Xamarin竟然可以将.NET代码原生编译成:Jar包供Java原生调用.swift类库.obj-c类库.C++类库 供目标平台传统代码直接调用 之前和很多朋友聊到Xamarin觉得确实不错, ...

  5. Swift 中的高阶函数和函数嵌套

    高阶函数 在Swift中,函数可做为“一等公民”的存在,也就意味着,我们可以和使用 int 以及 String 一样,将函数当做 参数.值.类型来使用. 其中,将函数当作一个参数和值来使用可见下: t ...

  6. 静态资源命名的注意点以及document.write与innerHTML的区别

    今天拿出了去年刚开始学前端的那本书来看,发现好多新东西. 使用下划线和混合大小写不利于SEO! document.write与innerHTML的区别 这个问题大概是初学前端的人才会问的吧,业务代码中 ...

  7. .NET开发人员的瓶颈和职业发展

    现在社会比前几年浮躁了,越来越多的人抱怨薪水低,高薪工作不好找; 诚然这有CPI的压力,可是也有很多人没有认清自己的职业发展. 很多.net程序员个各种纠结,想拿高薪又拿不到,想提高又不知道怎么能提高 ...

  8. VS编译环境中TBB配置和C++中lambda表达式

    TBB(Thread Building Blocks),线程构建模块,是由Intel公司开发的并行编程开发工具,提供了对Windows,Linux和OSX平台的支持. TBB for Windows ...

  9. Java transient关键字【转】

    转自:http://www.blogjava.net/fhtdy2004/archive/2009/06/20/286112.htmlVolatile修饰的成员变量在每次被线程访问时,都强迫从主内存中 ...

  10. 微信公众平台消息接口开发(26)从Hello2BizUser文本到subscribe事件

    微信公众平台 微信公众平台开发模式 消息接口 企业微信公众平台 Hello2BizUser subscribe 订阅事件 作者:方倍工作室 原文:http://www.cnblogs.com/txw1 ...