读写联系人需要用到android的ContentProvider

同时需要读和写联系人的权限

需要使用到联系人数据库中的

* raw_contacts表:
* contact_id:联系人id

* data表:联系人的具体信息,一个信息占一行
* data1:信息的具体内容
* raw_contact_id:联系人id,描述信息属于哪个联系人
* mimetype_id:描述信息是属于什么类型

* mimetypes表:通过mimetype_id到该表查看具体类型

 import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View; /*
* 读写联系人,通过系统提供的ContentProvider实现。需要读和写联系人的权限
* 需要使用raw_contacts表、data表、mimetypes表
*/
public class MainActivity extends Activity { private ContactBean contactBean; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
contactBean = new ContactBean();
}
//获取手机通讯录中的联系人信息
public void click(View v) {
ContentResolver cr = getContentResolver();
//获取到raw_contacts表中的contact_id字段
Cursor cursorContactId = cr.query(
Uri.parse("content://com.android.contacts/raw_contacts"),
new String[] { "contact_id" }, null, null, null);
if (cursorContactId != null) {
while (cursorContactId.moveToNext()) {
String contact_id = cursorContactId.getString(cursorContactId
.getColumnIndex("contact_id"));
//通过获取到的contact_id,在data表中查询具体的联系人名称,电话,email等信息。
Cursor cursor2 = cr.query(
Uri.parse("content://com.android.contacts/data"),
new String[] { "data1", "mimetype" },
"raw_contact_id=?", new String[] { contact_id }, null);
if (cursor2 != null) {
while (cursor2.moveToNext()) {
String data1 = cursor2.getString(cursor2
.getColumnIndex("data1"));
String mimetype = cursor2.getString(cursor2
.getColumnIndex("mimetype"));
//通过mimetypes表中字段比较,获取到联系人的email信息
if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
contactBean.setEmail(data1);
//通过mimetypes表中字段比较,获取到联系人的name信息
} else if ("vnd.android.cursor.item/name"
.equals(mimetype)) {
contactBean.setName(data1);
//通过mimetypes表中字段比较,获取到联系人的phone信息
} else if ("vnd.android.cursor.item/phone_v2"
.equals(mimetype)) {
contactBean.setPhone(data1);
}
}
System.out.println(contactBean.toString());
}
}
}
}
//插入数据到手机通讯录
public void insertContact(View v){
ContentResolver cr = getContentResolver();
//通过字段_id在raw_contacts表中查询目前通讯录含有多少条联系人,然后在已有的联系人数目上+1就是要插入联系人的_id.
Cursor cursor=cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
int num=1;
if (cursor.moveToLast()) {
int id=cursor.getColumnIndex("_id");
num=id+1;
}
ContentValues values = new ContentValues();
values.put("contact_id", num);
cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
values.clear();
values.put("data1", "二五");
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("raw_contact_id", num);
cr.insert(Uri.parse("content://com.android.contacts/data"), values);
values.clear();
values.put("data1", "12345678901");
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("raw_contact_id", num);
cr.insert(Uri.parse("content://com.android.contacts/data"), values);
values.clear();
values.put("data1", "1234@haha.com");
values.put("mimetype", "vnd.android.cursor.item/email_v2");
values.put("raw_contact_id", num);
cr.insert(Uri.parse("content://com.android.contacts/data"), values);
} }

Android开发之读写联系人的更多相关文章

  1. android 简单的读写联系人

    一.读取联系人 (1).从raw_contact表读 contact_id (2).从data表中读取data1 (3).从mimetypes读取mimetype 1.AndroidManifest. ...

  2. Android开发——遍历读写U盘、SD卡等外部存储

    1.首先需要得到挂载在手机上的有哪些盘符 String[] result = null; StorageManager storageManager = (StorageManager)getSyst ...

  3. Android开发 文件读写openFileOutput与openFileInput

    package com.example.androidtest; import java.io.ByteArrayOutputStream; import java.io.FileInputStrea ...

  4. Android开发进阶:如何读写Android文件

    Android主要有四大主要组件组成:Activity.ContentProvider.Service.Intent组成.Android文件的运行主要需要读写四大组件的文件.本文将介绍如何读写Andr ...

  5. Android开发学习清单

    目录: 第1章 Android应用与开发环境1.1 Android的发展和历史1.1.1 Android的发展和简介1.1.2 Android平台架构及特性1.2 搭建Android开发环境1.2.1 ...

  6. Android开发权威指南(第2版)新书发布

    <Android 开发权威指南(第二版)>是畅销书<Android开发权威指南>的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供 ...

  7. 【最后一篇API译文】Android开发-API指南- Contacts Provider

    Contacts Provider 今年加入了某字幕组,加之杂事颇多,许久未添新文了,惭愧之极. 在听闻 Google 即将重返中国后,近日忽又发现官方网站正在放出 API 中文版,比如本文.当然不是 ...

  8. android开发中的5种存储数据方式

    数据存储在开发中是使用最频繁的,根据不同的情况选择不同的存储数据方式对于提高开发效率很有帮助.下面笔者在主要介绍Android平台中实现数据存储的5种方式. 1.使用SharedPreferences ...

  9. (转).net开发者对android开发一周的学习体会

    春节期间,相对比较闲,上班时也没什么事情做.利用这一周的时间,简单的学习了一下移动方面的开发.主要是针对android,其实我对IOS更感兴趣 (因为我用iphone),苦于暂时没有苹果电脑,只能把它 ...

随机推荐

  1. get post

    浅谈HTTP中Get与Post的区别 2009-03-31 14:51 by hyddd, 248341 阅读, 74 评论, 收藏, 编辑 Http定义了与服务器交互的不同方法,最基本的方法有4种, ...

  2. 提高SQL查询效率的常用方法

    提高SQL查询效率的常用方法 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): Oracle的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driv ...

  3. 1078. Hashing (25)

    时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The task of this problem is simp ...

  4. Xubuntu下Mentohust认证(校园网用户)

    对于路由器上网到用户来说,自动分配IP上网。 对于校园网用户,首先下载mentohust_0.3.4-1_i386.deb,双击安装程序 然后在命令窗口中输入sudo -s 密码:user来获得roo ...

  5. 十九、mysql 数据分布式

    1.RAID 廉价磁盘冗余阵列 2.Symbolic links 通俗易懂的说就是通过连接符指向的操作,人为的将某些数据库分布到其他的文件夹/磁盘上 Linux: Mysql DATA路径:/opt/ ...

  6. oracle 将科学计数法数据转换为非科学计数法数据

    oracle 自定义函数: CREATE OR REPLACE FUNCTION ConvertNumeric(rawData VARCHAR2) --用于返回转换科学计算法dhx RETURN VA ...

  7. Oracle RAC集群安装之:Grid软件安装过程蓝屏

    前几天在安装一套RAC服务器的过程中,遇到了蓝屏事件,折腾了蛮久(在排查是否存在硬件问题上花费了相当多一部分时间),整个过程大概说明如下: 1.两台华为的PC SERVER,操作系统为WIN SERV ...

  8. 【学习总结】OS X , IOS , IOS SDK , XCode之间的关系

    几个基本的概念 : OS X : 属于桌面PC级别(IMac,MacPro等)对应安装的操作系统 IOS : 属于移动设备级别(Iphone,Ipad等)对应安装的操作系统 XCode: 是一个IDE ...

  9. [搜片神器]BT种子下载超时很多的问题分析

    继续接着第一篇写:使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器] 谢谢园子朋友的支持,已经找到个VPS进行测试,国外的服务器: h31bt.org  大家可以给提点意 ...

  10. apache与nginx日志文件的区别(转载)

    apache与nginx日志文件的区别 转载:http://www.xfcodes.com/apache/log/3270.htm 导读:apache与nginx日志文件的区别,在apache与ngi ...