- 浏览: 176233 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
dupeng41255:
问一下,。com的接口 是不是需要注册啊?我调用的时候返回说需 ...
java实现whois域名查询 -
feiyu86:
比喻的非常贴切。。
synchronized方法和代码块的使用 -
罡风笑:
贴结果:CBH 蜀汉 绝顶 刀客
开心一下 你古代的身份。超级好玩~
最近在开发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 属性动画(Property Animation) 完全解析 (下)
2016-02-22 14:49 1063版权声明:本文为博主原创文章,未经博主允许不得转载。 ... -
Android 属性动画(Property Animation) 完全解析 (上)
2016-02-22 14:47 728版权声明:本文为博主原创文章,未经博主允许不得转载。 ... -
Windows系统中Maven的安装与配置以及m2eclipse插件的安装
2014-04-30 16:06 1190近期公司的一个项目需要用maven搭建,所以把maven的环 ... -
Gallery自动循环滚动,手动滚动的平滑切换及存在问题
2012-11-06 10:51 3544来自:http://blog.csdn.net/lenghun ... -
Gallery自动循环滚动,手动滚动的平滑切换及存在问题
2012-11-06 10:34 7来自:http://blog.csdn.net/lenghun ... -
VLC for Android on Linux
2012-07-12 14:28 1942来自:http://wiki.videolan.org/And ... -
Android模拟器对应电脑键盘快捷键
2012-01-10 00:01 1424Home键(小房子键) 在键盘上映射的是home键。 ... -
Android的gallery实现无限循环和降低选择频率
2011-07-20 17:55 1484gallery是一个很好用的控 ... -
Android编译问题:Only 64-bit build environments are supported beyond froyo/2.2
2011-03-07 19:01 1132在使用: $ repo init -u git://An ... -
任务管理器正在运行的程序(2)
2010-12-23 14:36 1734RunningTaskInfo AndroidManifes ... -
任务管理器正在运行的程序(1)
2010-12-23 14:26 1536RunningTaskInfo 范例说明 ... -
android 监听文件和目录的创建删除移动等事件
2010-11-11 15:14 1768android.os下的FileObserver类是一个 ... -
animation知识学习
2010-10-22 14:07 2036LinearInterpolator 变化率是个常数,即 f ... -
Android 页面切换动画效果
2010-10-18 12:54 4175在Android 2.0之后有了ove ... -
android自适应屏幕方向和大小
2010-09-27 16:51 1751一:不同的layoutAndroid手机屏幕大小不一,有 ... -
Android图片处理的的一些方法
2010-08-02 18:54 63291.图片加载方法,方便用户加载图片 /**** 加载本地图片 ... -
OMA-SyncML-DataSyncProtocol-V1_1_2-20030612-A
2010-07-02 12:12 672手机联系人等信息同步中使用 -
Android取得屏幕分辨率
2010-05-31 10:32 956WindowManager windowManager = g ... -
Content Providers
2010-03-04 23:21 1196来源:http://developer.andro ... -
Android基础 : Android Content Provider[转]
2010-03-02 23:09 1105Android应用程序可以使用文件或SqlLite数据库来存储 ...
相关推荐
5. **ContentResolver**:在Android中,ContentResolver是与内容提供者交互的接口,用于读写联系人数据。 实验过程中,学生需编写实验报告,详述实验目的、内容、功能设计、实现思路以及实验总结,同时提交源代码和...
每个联系人信息(姓名、电话号码、电子邮件等)会被保存在特定的数据库表中。开发者需要定义数据库模型,创建表,以及实现增删改查(CRUD)操作。 3. **ContentProvider**:ContentProvider是Android系统提供的一种...
你可能需要创建一个表来保存联系人信息,包括姓名、电话号码等,并编写SQL查询语句来读取和写入数据。 6. **数据绑定与适配器**:在联系人列表显示时,会用到适配器(Adapter)将数据绑定到视图上。例如,你可以...
Android系统中的权限管理对即时通讯应用尤为重要,jChat1.4需要处理如录音、读写联系人、获取位置等敏感权限。同时,良好的推送通知策略能提高用户体验,如使用Foreground Service保证推送的及时性。 10. **测试与...
QuickSearchBox(QSB)是Android操作系统中的一个关键组件,它为用户提供了一个统一的搜索界面,可以快速访问系统内的各种信息,包括联系人、应用、网页等。在Android开发中,理解和研究QSB的源码对于提升应用的搜索...
布局文件可能包括ListView或RecyclerView来显示联系人列表,EditText用于输入搜索查询,以及各种Button用于执行操作(如添加、删除、编辑联系人)。 2. **数据管理**:通讯录应用需要存储和管理联系人数据。这通常...
在这个通讯录应用中,SQLite被用来保存联系人的姓名、电话号码等信息。开发者需要创建数据库表结构,执行SQL语句进行数据的插入、查询、更新和删除。 **3. Activity和Intent** - **Activity**:在Android中,...
对于保存联系人,你需要在`AndroidManifest.xml`文件中添加`READ_CONTACTS`和`WRITE_CONTACTS`权限: ```xml <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:...
- 保存联系人数据至本地,保证数据安全不丢失。 1.2 设计环境 开发环境通常包括安装了Android Studio的计算机,Android SDK,以及用于模拟器或实际设备测试的Android操作系统。 ### 第二章 设计功能 2.1 增加、...
为了解决这个问题,我们可以开发一个"android合并重复联系人功能",这将极大地提升用户体验,使得用户能够高效地管理和整合他们的通讯录。这个功能既可以作为一个独立的应用程序(apk)提供,也可以被集成到系统的...
在Android开发中,实现“@联系人功能”与微信聊天朋友圈中的类似功能是一项常见的需求。这一功能允许用户在文本输入中提及或提醒特定的联系人,增强了社交互动性。本篇将详细介绍如何在Android应用中实现这样的功能...
- **运行时权限**:针对敏感操作(如读取联系人、访问位置信息等),应用需要在运行时向用户请求权限。 - **安全机制**:如签名机制、沙盒模型等,确保应用之间的隔离和数据的安全。 #### 十、Android调试与发布 ...
- **危险权限**:涉及隐私和安全的权限,如读写联系人、位置信息等。 6. **多线程**: - **Handler**、**Looper**和**MessageQueue**:实现主线程与子线程间的消息传递。 - **IntentService**:单线程服务,自动...
Android Android Android Android 开发背景 � 计算技术、无线接入技术的发展,使嵌入式系统逐渐有能力对桌面系统常规业务进行支持。 � 谷歌长期以来奉行的移动发展战略:通过与全球各地的手机制造商和移动运营商...
#### 六、Android联系人与位置信息 1. **Android联系人信息** - 获取联系人列表。 - 获取联系人详情。 - 修改联系人信息。 - 显示联系人头像。 2. **Android位置信息** - 获取当前位置。 - 获取位置更新。 ...
- 应用可能使用了`AlertDialog`或`DialogFragment`来实现弹出式界面,如提示用户保存或取消添加联系人。通过设置对话框的标题、消息和按钮,实现用户交互。 6. **事件监听**: - `OnClickListener`用于监听按钮...
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平台上联系人管理应用的源码,尤其是基于Android 2.3版本进行的分析。通过这种剖析,开发者可以更好地理解如何定制及使用源码,以构建或优化联系人...
- **AndroidManifest.xml**:所有需要的权限应在该文件中声明,例如访问联系人、短信等敏感信息的权限。 - **运行时权限**:对于Android 6.0及以上版本,需要在运行时请求权限,通过`ActivityCompat....