读写联系人需要用到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. AngularJS(9)-表单

    AngularJS 表单是输入控件的集合 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  2. 如何使用Git——(一)

    一.git与github git 是一款自由和开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目. github 是一个网站,给用户提供git仓库托管服务,是开源代码库以及版本控制系统.在 ...

  3. IE11下ASP.NET Forms身份认证无法保存Cookie的问题

    IE11下ASP.NET Forms身份认证无法保存Cookie的问题 折腾了三四天,今天才找到资料,解决了. 以下会转贴,还没来得及深究,先放着,有空再学习下. ASP.NET中使用Forms身份认 ...

  4. MySQL Connector Net连接vs2012问题

    最近做一.NET项目,数据库用到MySQL,可是在VS2012连接数据库是遇到问题,提示:Authentication with old password no longer supported, u ...

  5. PIL 安装

    1.安装依赖包 1.1 ubuntu安装 apt-get install python-devapt-get install libjpeg-dev apt-get install libjpeg8- ...

  6. ios设备 分辨率(转)

    1 iOS设备的分辨率 iOS设备,目前最主要的有3种(Apple TV等不在此讨论),按分辨率分为两类 iPhone/iPod Touch 普屏分辨率    320像素 x 480像素 Retina ...

  7. C#实现IDispose模式

    .net的GC机制有两个问题:首先GC并不能释放所有资源,它更不能释放非托管资源.其次,GC也不是实时的,所有GC存在不确定性.为了解决这个问题.NET提供了析构函数 public class Dis ...

  8. 1037: [ZJOI2008]生日聚会Party - BZOJ

    Description 今天是hidadz小朋友的生日,她邀请了许多朋友来参加她的生日party. hidadz带着朋友们来到花园中,打算坐成一排玩游戏.为了游戏不至于无聊,就座的方案应满足如下条件: ...

  9. 4.4 spring-自定义标签的解析

    1.0 自定义标签的解析. 在之前的章节中,我们完成了对spring 默认标签的加载过程.那么现在我们将开始新的里程, spring 自定义标签的解析; 代码如下: /** * Parse the e ...

  10. Bypass Preventing CSRF

    CSRF在过去的n年(n>2)一直都火,在bh/defcon/owasp等会议上多次探讨CSRF的攻防[具体你可以看看以往的那些pp].前 段时间PLAYHACK.net上发表了一个总结性的pp ...