读写联系人需要用到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. C# login with cookie and fiddler2

    http://blog.codeblack.nl/post/HttpWebRequest-HttpWebResponse-and-cookies.aspx CookieContainer cookie ...

  2. JS判断设备终端(PC,iPad,iPhone,android,winPhone)和浏览器

    JS判断设备终端(PC,iPad,iPhone,android,winPhone)和浏览器 var ua = navigator.userAgent; var browser = {}, weixin ...

  3. php错误消息捕获

    <?php header('Content-type:text/html;charset=UTF-8'); //function_exists('ini_set') && ini ...

  4. Cassandra1.2文档学习(16)—— 模式的变化

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...

  5. AngularJs--过滤器(filter)

    过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们 ...

  6. android studio 打开github开源代码

    1.最近下载的开源代码全是github来的,一直用eclipse开发,对于android studio来说是全新的 2.在eclipse导入一个工程那是so easy, import选择一下就可以. ...

  7. Linux命令执行顺序— ||和&&和;

    command1 && command2: &&左边的command1执行成功(返回0表示成功)后,&&右边的command2才能被执行. comman ...

  8. 【学习总结】UIGestureRecognizer(手势识别器)

    基本知识点 : -> IOS 3.2之后 , 苹果推出了手势识别功能 ( Gesture Recognizer ) 在触摸事件处理方面 , 简化开发难度. -> UIGesture Rec ...

  9. 【BZOJ1468】Tree

    Description 给你一棵TREE,以及这棵树上边的距离.问有多少对点它们两者间的距离小于等于K Input N(n<=40000) 接下来n-1行边描述管道,按照题目中写的输入 接下来是 ...

  10. mvc权限,登陆,异常

    public class FilterOfPer : ActionFilterAttribute     {         public override void OnActionExecutin ...