读写联系人需要用到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. 一本JavaEE的案例书

    案例很好.1.网上书店 2.AJAX网页聊天

  2. Mysql MyISAM数据库批量转换表引擎为Innodb

    Mysql MyISAM数据库批量转换表引擎为Innodb 最近在做事物处理需要把表结构都改为带有支持事物的Innodb引擎格式, 把里面数据库 用户名.密码 等信息修改为你自己的,放在网站下运行即可 ...

  3. php curl抓取远程页面内容的代码

    使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...

  4. 关于maven参数过滤

    一.maven通过设置过滤器,可以使maven在编译打包时实现参数过滤的功能(详细配置说明略) <filters> <filter>../antx.properties< ...

  5. 淘宝的ip地址库

    1. 请求接口(GET): http://ip.taobao.com/service/getIpInfo.php?ip=[ip地址字串] 2. 响应信息: (json格式的)国家 .省(自治区或直辖市 ...

  6. 分享自lordinloft 《[转载]COMPILE_OPT 的用法介绍》

    来源:http://blog.sina.com.cn/s/blog_63180b75010117oj.html#bsh-73-372143085

  7. 使用plspl创建orcale作业

    1.由于权限问题,第一步应先以sys账户登录,路径:工具->DBMS 调试程序->作业  ,新建一个作业,出现如下图的窗口 2.开始依次填写相应内容,Name为作业名字,注意要加上用户名前 ...

  8. 【maven项目结构】module 生成独立的jar

    生成jar 生成jar的过程会出现以下问题: clean完了之后就会出现以下问题: install [INFO] Scanning for projects... [INFO] [INFO] ---- ...

  9. HDFS导论(转)

    1.流式数据访问 HDFS的构建思想是这样的:一次写入,多次读取是最高效的访问模式.数据集通常有数据源生成或从数据源复制而来,接着长时间在此数据集上进行各类分析.每次分析都将设计数据集的大部分数据甚至 ...

  10. 在虚拟中开启Windows 8.1的Hyper-V平台

    VM安装windows8开启Hype-V 今天老魏用VM安装了Windows8.1系统,想用此系统来开发一下Windows Phone8,但是要求确实要开启Hyper-V平台技术,本来是没有任何的问题 ...