Android 联系人开发- 保存联系人

 

最近在开发android平台的联系人部分,有点总结和大家分享一下:

 

参数:

String name,   联系人姓名

String homePhone,  家庭电话

String mobile,   手机

String workphone,  公司电话

String workfax,       公司传真

String emailAddr,    邮件地址

String msn,       
String skype,

String qq,

String company,      公司名称

String position,       职位

String homeAddr,   家庭地址

String companyAddr  公司地址

 

android在保存联系人的时候要特别注意的是 电话和手机的输入格式,以及添加IM时候要主要private属性

1) 手机格式: 1-390-123-1122, 经过验证1开头的号码都被认为按照手机格式显示

2)   电话及传真格式:010-123-11111,经过验证非1开头的号码都被认为按照电话格式显示

3) 添加IM时要加上 values.put(ContactMethods.ISPRIMARY, 0);

 

下面看看我写的代码吧:

 

ContentValues values = new ContentValues();
values.put(People.NAME, name);
values.put(Contacts.People.STARRED, 0);//很重要

Uri newPerson = Contacts.People.createPersonInMyContactsGroup(getContentResolver(), values);

 

 

 

Uri numberUri = null;
    if (!ifEmpty(homePhone)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.Phones.CONTENT_DIRECTORY);
     values.put(Contacts.Phones.TYPE, People.Phones.TYPE_HOME);
     values.put(People.NUMBER, homePhone);
     getContentResolver().insert(numberUri, values);
    }

    if (!ifEmpty(mobile)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.Phones.CONTENT_DIRECTORY);
     values.put(Contacts.Phones.TYPE, People.Phones.TYPE_MOBILE);
     values.put(People.NUMBER, mobile);
     getContentResolver().insert(numberUri, values);

    }

    if (!ifEmpty(workphone)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.Phones.CONTENT_DIRECTORY);
     values.put(Contacts.Phones.TYPE, People.Phones.TYPE_WORK);
     values.put(People.NUMBER, workphone);
     getContentResolver().insert(numberUri, values);
    }

 

    if (!ifEmpty(workfax)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.Phones.CONTENT_DIRECTORY);
     values.put(Contacts.Phones.TYPE, People.Phones.TYPE_FAX_WORK);
     values.put(People.NUMBER, workfax);
     getContentResolver().insert(numberUri, values);
    }

    if (!ifEmpty(emailAddr)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.ContactMethods.CONTENT_DIRECTORY);
     values.put(Contacts.ContactMethods.KIND, Contacts.KIND_EMAIL);
     values.put(Contacts.ContactMethods.DATA, emailAddr);
     values.put(Contacts.ContactMethods.TYPE, Contacts.ContactMethods.TYPE_HOME);
     getContentResolver().insert(numberUri, values);
    }

    //add IM tools
    if (!ifEmpty(msn)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.ContactMethods.CONTENT_DIRECTORY);
     values.put(Contacts.ContactMethods.KIND, Contacts.KIND_IM);
     values.put(ContactMethods.TYPE, ContactMethods.TYPE_OTHER);
     values.put(Contacts.ContactMethods.DATA, msn);

     values.put(ContactMethods.AUX_DATA, ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_MSN));
     values.put(ContactMethods.ISPRIMARY, 0); //很重要,否则添加时出错
     getContentResolver().insert(numberUri, values);
    }

    if (!ifEmpty(skype)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.ContactMethods.CONTENT_DIRECTORY);
     values.put(Contacts.ContactMethods.KIND, Contacts.KIND_IM);
     values.put(ContactMethods.TYPE, ContactMethods.TYPE_OTHER);
     values.put(Contacts.ContactMethods.DATA, skype);

     values.put(ContactMethods.AUX_DATA, ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_SKYPE));
     values.put(ContactMethods.ISPRIMARY, 0); //很重要,否则添加时出错
     getContentResolver().insert(numberUri, values);
    }

    if (!ifEmpty(qq)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.ContactMethods.CONTENT_DIRECTORY);
     values.put(ContactMethods.KIND, Contacts.KIND_IM);
     values.put(ContactMethods.TYPE, ContactMethods.TYPE_OTHER);
     values.put(Contacts.ContactMethods.DATA, qq);

     values.put(ContactMethods.AUX_DATA, ContactMethods.encodePredefinedImProtocol(ContactMethods.PROTOCOL_QQ));
     values.put(ContactMethods.ISPRIMARY, 0); //很重要,否则添加时出错     

     getContentResolver().insert(numberUri, values);
    }

    // add company and title
    if (!ifEmpty(company) || !ifEmpty(position)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, Contacts.Organizations.CONTENT_DIRECTORY);
     if (!ifEmpty(company)) {
      values.put(Contacts.Organizations.COMPANY, company);
     }
     if (!ifEmpty(position)) {
      values.put(Contacts.Organizations.TITLE, position);
     }
     values.put(Contacts.Organizations.TYPE, Contacts.Organizations.TYPE_WORK);
     getContentResolver().insert(numberUri, values);
    }

    //add address
    if (!ifEmpty(homeAddr)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.ContactMethods.CONTENT_DIRECTORY);
     values.put(Contacts.ContactMethods.KIND, Contacts.KIND_POSTAL);
     values.put(Contacts.ContactMethods.TYPE, Contacts.ContactMethods.TYPE_HOME);
     values.put(Contacts.ContactMethods.DATA, homeAddr);
     getContentResolver().insert(numberUri, values);
    }

    if (!ifEmpty(companyAddr)) {
     values.clear();
     numberUri = Uri.withAppendedPath(newPerson, People.ContactMethods.CONTENT_DIRECTORY);
     values.put(Contacts.ContactMethods.KIND, Contacts.KIND_POSTAL);
     values.put(Contacts.ContactMethods.TYPE, Contacts.ContactMethods.TYPE_WORK);
     values.put(Contacts.ContactMethods.DATA, companyAddr);
     getContentResolver().insert(numberUri, values);
    }

 

 

    -------------------------------

 

 private boolean ifEmpty(String input) {
  if (input == null || input.length() == 0 || "".equals(input)) {
   return true;
  } else {
   if ("".equals(input.trim())) {
    return true;
   }
   return false;
  }
 }

 

-------------------------------------

格式化电话号码的函数

private String formatPhoneNumber(String input) {
  if (input.startsWith("1")) {
   if (input.length() == 1) {
    return input;
   } else if (input.length() > 1 && input.length() < 5) {
    return input.substring(0, 1) + "-" + input.substring(1, input.length());
   } else if (input.length() >= 5 && input.length() < 8) {
    return input.substring(0, 1) + "-" + input.substring(1, 4) + "-" + input.substring(4, input.length());
   } else if (input.length() >= 8) {
    return input.substring(0, 1) + "-" + input.substring(1, 4) + "-" + input.substring(4, 7) + "-" + input.substring(7, input.length());
   }
  } else {
   if (input.length() <= 3) {
    return input;
   } else if (input.length() > 3 && input.length() < 7) {
    return input.substring(0, 3) + "-" + input.substring(3, input.length());
   } else if (input.length() >= 7) {
    return input.substring(0, 3) + "-" + input.substring(3, 6) + "-" + input.substring(6, input.length());
   }
  }
  return "";
 }

 

 

 

欢迎大家热烈讨论,看android 模拟器 contact部分的源码还有一个途径:

http://gitorious.org/0xdroid/packages_apps_contacts

需要使用git工具来下载!

 

 

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
目 录 1 前言 1 2 系统的需求分析 2 2.1 需求分析 2 2.1.1 基本功能需求 2 2.1.2 系统用例分析 2 2.2 总体设计方案 5 2.2.1 系统模块关系与划分 5 3 系统的概要设计 6 3.1 通讯录需求分析 6 3.1.1 新建、编辑联系人 6 3.1.2 查找联系人 6 3.1.3 通讯功能 6 3.1.4 个人中心 7 3.1.5 还原与备份功能 7 3.2 系统界面设计 8 4 系统编码实现 14 前 言 随着移动通信与Internet向移动终端的普及,网络和用户对移动终端的要求越来越高 ,而Symbian,Windows Mobile,PalmOS等手机平台过于封闭,不能很好的满足用户的需求,因此市场迫切需要 一个开发性很强的平台。经过多年的发展,第三代数字通信(3G)技术活动了广泛的接 受,它为移动终端用户带来了更快的数据传输速率。随着3G网络的使用,移动终端不再 仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服 务将会有很大的发展空间。Google为此与2007年11月推出了一个专为移动设备设计的软 件平台——AndroidAndroid 是一套真正意义上的开发性的移动设备综合平台,它包括操作系统、中间件和一些关键 的平台应用。Android 是由Linux+Java构成的开源软件,允许所有厂商和个人在其基础上进行开发Android平 台的开放性等特点既能促进技术(包括平台本身)的创新,又有助于降低开发成本,还 可以是运营商能非常方便地制定自己的特色化的产品。因此,它具有很大的市场发展潜 力。 Android(Google公司)是Google开发的基于Linux平台的开源手机操作系统。它包括 操作系统、用户界面和应用程序 ——移动电话工作所需的全部软件,而且不存在任何以往阻碍移动产业创新的专有权障碍 。谷歌与开放手机联盟合作开发Android,这个联盟由包括中国移动、摩托罗拉、高通、宏达和 T-Mobile 在内的 30 多家技术和无线应用的领军企业组成。 1) 优点:具备触摸屏、高级图形显示和上网功能,界面强大,可以说是一种 融入全部Web应用的单一平台 2) 缺点:由于时时刻刻都需要和网络进行连接,因此在手机的能耗方面控制就较差, 导致待机能力不足;又由于其开源性,过分依赖开发商,缺少标准配置。 1. 需求分析 1. 基本功能需求 能要求:实现通信录的在线备份还原功能,能把系统的通信录一键导入导出。 实现要求:客户端基于Android平台实现,服务端技术自定 用例场景:小明丢了手机,只好去抢购了一个小米同时把手机卡补办回来,需要把之 前手机的200个联系人补上。好在小明之前把所有联系人都备份到服务器了,只需要下载 在线通信录后,登录平台,一键还原即可。 2. 系统用例分析 图1- 1显示了通话记录功能模块。包括了联系人详细信息查看,清空通话记录,在选择一个条 目后,可以对其进行拨打电话,发送短信功能的操作,也可以进行删除。 手机用户 图1-1 通话记录模块用例图 图1- 2显示了联系人功能模块的用例。包括了查看联系人详细信息,编辑联系人信息,新建联 系人,对选中的联系人,可以对其进行拨打电话、发送短信的操作。用户还可以进行联 系人搜索,这样方便用户快速找到想找的联系人信息。 图1-2 电话薄模块用例图 图1- 3为个人中心模块中设置个人详细信息子模块的用例。该模块的功能就是用户设置自己的 个人基本信息。 图1-3 设置个人信息模块用例图 图1-4显示了联系人还原与备份的用例图。该模块的功能就是联系人的还原与备份 图1-4 联系人导入导出 2. 总体设计方案 1. 系统模块关系与划分 一个好的系统设计的步骤决定了程序是否能按照设计者的目的按时完成,是否能在规定 的时间内按照设计者的要求高质量的完成程序必要的功能。并且按照标准的设计步骤对 程序进行调试,测试,以及后期的优化完善,使程序更加具有健壮性和可用性。通过对 通讯录功能、系统模块、用户需求方面进行全方位的分析制定开发流程。 采用标准的开发流程确定系统具有用户管理功能,联系人增删改功能,通讯功能,查找 功能,备份等功能。 图1-5 系统功能图 通过对系统的功能结构的分析,设计后系统运行流程是系统运行后用户将进入通讯录 主界面,可以看到联系人,增加联系人,。通过点击MENU界面的增加功能选项可以新增 联系人,通过查找按钮可以对联系人进行姓名、号码的操作。通过个人中心可以显示所 有联系人、还原所有联系人、并备份功能。在联系人详细信息界面点击MENU键弹出通讯 功能框选择拨打电话按钮或者发信息发邮件按键,系统的运行流程图如1-6所示。 图1-6 系统运行流程 2.1通讯录需求分析 根据手机功能调查显

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值