`
zsnlovewl
  • 浏览: 176233 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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部分的源码还有一个途径:

分享到:
评论

相关推荐

    Android开发实验---通讯录.docx

    5. **ContentResolver**:在Android中,ContentResolver是与内容提供者交互的接口,用于读写联系人数据。 实验过程中,学生需编写实验报告,详述实验目的、内容、功能设计、实现思路以及实验总结,同时提交源代码和...

    Android通讯录的开发-完整代码

    每个联系人信息(姓名、电话号码、电子邮件等)会被保存在特定的数据库表中。开发者需要定义数据库模型,创建表,以及实现增删改查(CRUD)操作。 3. **ContentProvider**:ContentProvider是Android系统提供的一种...

    Android 联系人效果-IT计算机-毕业设计.zip

    你可能需要创建一个表来保存联系人信息,包括姓名、电话号码等,并编写SQL查询语句来读取和写入数据。 6. **数据绑定与适配器**:在联系人列表显示时,会用到适配器(Adapter)将数据绑定到视图上。例如,你可以...

    Android--开发--jChat1.4.rar

    Android系统中的权限管理对即时通讯应用尤为重要,jChat1.4需要处理如录音、读写联系人、获取位置等敏感权限。同时,良好的推送通知策略能提高用户体验,如使用Foreground Service保证推送的及时性。 10. **测试与...

    Android--开发---QuickSearchBox程序源码.rar

    QuickSearchBox(QSB)是Android操作系统中的一个关键组件,它为用户提供了一个统一的搜索界面,可以快速访问系统内的各种信息,包括联系人、应用、网页等。在Android开发中,理解和研究QSB的源码对于提升应用的搜索...

    Android课程设计--便捷通讯录

    布局文件可能包括ListView或RecyclerView来显示联系人列表,EditText用于输入搜索查询,以及各种Button用于执行操作(如添加、删除、编辑联系人)。 2. **数据管理**:通讯录应用需要存储和管理联系人数据。这通常...

    AndroidStudio安卓课设-简易通讯录

    在这个通讯录应用中,SQLite被用来保存联系人的姓名、电话号码等信息。开发者需要创建数据库表结构,执行SQL语句进行数据的插入、查询、更新和删除。 **3. Activity和Intent** - **Activity**:在Android中,...

    android多个联系人保存到通讯录

    对于保存联系人,你需要在`AndroidManifest.xml`文件中添加`READ_CONTACTS`和`WRITE_CONTACTS`权限: ```xml &lt;uses-permission android:name="android.permission.READ_CONTACTS" /&gt; &lt;uses-permission android:...

    android应用程序开发

    - 保存联系人数据至本地,保证数据安全不丢失。 1.2 设计环境 开发环境通常包括安装了Android Studio的计算机,Android SDK,以及用于模拟器或实际设备测试的Android操作系统。 ### 第二章 设计功能 2.1 增加、...

    android合并重复联系人功能

    为了解决这个问题,我们可以开发一个"android合并重复联系人功能",这将极大地提升用户体验,使得用户能够高效地管理和整合他们的通讯录。这个功能既可以作为一个独立的应用程序(apk)提供,也可以被集成到系统的...

    Android@联系人功能

    在Android开发中,实现“@联系人功能”与微信聊天朋友圈中的类似功能是一项常见的需求。这一功能允许用户在文本输入中提及或提醒特定的联系人,增强了社交互动性。本篇将详细介绍如何在Android应用中实现这样的功能...

    Android应用程序开发

    - **运行时权限**:针对敏感操作(如读取联系人、访问位置信息等),应用需要在运行时向用户请求权限。 - **安全机制**:如签名机制、沙盒模型等,确保应用之间的隔离和数据的安全。 #### 十、Android调试与发布 ...

    Android应用开发揭秘-书籍所需源码

    - **危险权限**:涉及隐私和安全的权限,如读写联系人、位置信息等。 6. **多线程**: - **Handler**、**Looper**和**MessageQueue**:实现主线程与子线程间的消息传递。 - **IntentService**:单线程服务,自动...

    新版Android开发教程.rar

    Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...

    Android-Training-Course-in-Chinese

    #### 六、Android联系人与位置信息 1. **Android联系人信息** - 获取联系人列表。 - 获取联系人详情。 - 修改联系人信息。 - 显示联系人头像。 2. **Android位置信息** - 获取当前位置。 - 获取位置更新。 ...

    android入门demo--铁哥们通讯录

    - 应用可能使用了`AlertDialog`或`DialogFragment`来实现弹出式界面,如提示用户保存或取消添加联系人。通过设置对话框的标题、消息和按钮,实现用户交互。 6. **事件监听**: - `OnClickListener`用于监听按钮...

    Android高级编程--源代码

    9.1.4 在线状态和联系人列表简介 282 9.1.5 管理聊天会话 285 9.1.6 发送和接收数据信息 289 9.2 SMS简介 291 9.2.1 在应用程序中使用SMS 291 9.2.2 发送SMS信息 291 9.2.3 监听SMS消息 294 9.2.4 紧急响应...

    android联系人APP源码剖析

    首先,Android联系人APP源码剖析这一标题表明本文将重点讲解Android平台上联系人管理应用的源码,尤其是基于Android 2.3版本进行的分析。通过这种剖析,开发者可以更好地理解如何定制及使用源码,以构建或优化联系人...

    Android项目实战--手机卫士07--设置向导

    - **AndroidManifest.xml**:所有需要的权限应在该文件中声明,例如访问联系人、短信等敏感信息的权限。 - **运行时权限**:对于Android 6.0及以上版本,需要在运行时请求权限,通过`ActivityCompat....

Global site tag (gtag.js) - Google Analytics