* 1.读联系人
联系人数据是存储在com.android.providers.contacts应用的数据库中的, 该应用对外提供了ContentProvider
下载原码可以得到Uri和path
查询raw_contacts表得到手机中联系人的id, 用id作为条件查询data表即可得到联系人的数据
    2.写联系人
先向raw_contacts表写一个id
再用这个id向data表写联系人数据
 ** 3.批量操作

ContentResolver.applyBatch()

操作联系人时注意配置读取联系人和写入联系人的权限!!

关于联系人的数据库的表:

示例代码:

package com.itheima.contact;import java.util.ArrayList;import android.content.ContentProviderOperation;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.test.AndroidTestCase;public class ContactTest extends AndroidTestCase {private Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts");private Uri dataUri = Uri.parse("content://com.android.contacts/data");public void testRead() {ContentResolver resolver = getContext().getContentResolver();// 先查raw_contacts表, 得到所有id(contact_id非null)Cursor rawContactsCursor = resolver.query(rawContactsUri, new String[] { "_id" }, null, null, null);while (rawContactsCursor.moveToNext()) {long id = rawContactsCursor.getLong(0);// 用id作为条件, 查询data表中的数据,注意没有mimetype_id这一列,该列自动关联到了mimetype时表的mimetype!!!Cursor dataCursor = resolver.query(dataUri, new String[] { "mimetype", "data1" }, "raw_contact_id=?", new String[] { id + "" }, null);while (dataCursor.moveToNext()) {String mimetype = dataCursor.getString(0);String data = dataCursor.getString(1);System.out.println(mimetype + ": " + data);}}}/*for (String name : dataCursor.getColumnNames()) {  // 获取所有列名System.out.println(name);}*/public void testWrite() {ContentResolver resolver = getContext().getContentResolver();ContentValues values = new ContentValues();// 先向raw_contacts表写一个idUri resultUri = resolver.insert(rawContactsUri, values);long id = ContentUris.parseId(resultUri);// 用这个id作为data表的raw_contact_id, 再写3条数据values.put("raw_contact_id", id);values.put("mimetype", "vnd.android.cursor.item/name");values.put("data1", "曹睿");resolver.insert(dataUri, values);values.put("mimetype", "vnd.android.cursor.item/phone_v2");values.put("data1", "13012345678");resolver.insert(dataUri, values);values.put("mimetype", "vnd.android.cursor.item/email_v2");values.put("data1", "sl@hotmail.com");resolver.insert(dataUri, values);}//批量操作,类似开启事务,public void testWriteBatch() throws Exception {ContentResolver resolver = getContext().getContentResolver();ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();       // 创建集合, 用来装多个操作ContentProviderOperation operation1 = ContentProviderOperation.newInsert(rawContactsUri)       // 创建一个Insert操作的Builder.withValue("_id", null)        // 设置要插入列名和数据(列名为_id, 数据为null时自动生成).build();                    // 生成插入操作对象ContentProviderOperation operation2 = ContentProviderOperation.newInsert(dataUri).withValueBackReference("raw_contact_id", 0)             // 插入的数据是同组第1个操作的结果.withValue("mimetype", "vnd.android.cursor.item/name").withValue("data1", "张泽华").build();ContentProviderOperation operation3 = ContentProviderOperation.newInsert(dataUri).withValueBackReference("raw_contact_id", 0).withValue("mimetype", "vnd.android.cursor.item/phone_v2").withValue("data1", "13187654321").build();ContentProviderOperation operation4 = ContentProviderOperation.newInsert(dataUri).withValueBackReference("raw_contact_id", 0).withValue("mimetype", "vnd.android.cursor.item/email_v2").withValue("data1", "zzh@163.com").build();operations.add(operation1);operations.add(operation2);operations.add(operation3);operations.add(operation4);resolver.applyBatch("com.android.contacts", operations);   // 一次性执行集合中的多个操作,要成功,则全部成功,若中途某个操作失败,则全失败;}}

Android下操作联系人(Contacts)相关推荐

  1. Android联系人Contacts详解

    1.获取联系人详细信息 在(一)中我们只是获取了联系人的ID和NAME,但是这是远远不够的,怎么样获取其他的值呢? public void fetchContactInformation() {Str ...

  2. android下获取无线wif信号、ssid、MAC等操作类

    一个android下获取无线wif信号.ssid.MAC等操作的类. WifiAdmin.java package com.afu; import java.util.List; import and ...

  3. android文件读取工具类,Android 下读取Assets Properties操作封装工具类

    Android 下读取Assets Properties操作封装工具类 发布时间:2018-06-03作者:laosun阅读(2081) 为了方便使用,首先创建BaseApplication类,如下所 ...

  4. android sim卡联系人存储格式,Android SIM卡联系人的增删改查操作

    手机在存储联系人时支持存储到手机或者sim卡,本文主要讲述Android的sim卡中联系人是如何操作的. 1.权限 由于操作联系人的信息,所以联系人的读取和写入是必不可少的. 2.URI URI的创建 ...

  5. 在Android下通过ExifInterface类操作图片的Exif信息

    什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...

  6. Android通讯录(联系人)-ContentProvider

    联系人提供程序是一个强大而又灵活的 Android 组件,用于管理设备上联系人相关数据的中央存储区. 联系人提供程序是您在设备的联系人应用中看到的数据源,您也可以在自己的应用中访问其数据,并可在设备与 ...

  7. android批量添加联系人,Android实现批量添加联系人到通讯录

    由于工作上的需要,把数据库中备份的联系人添加到Android通讯录,一般都有几百条记录,插入一条数据系统默认commit一次,这样效率 由于工作上的需要,把数据库中备份的联系人添加到Android通讯 ...

  8. Android权限操作之uses-permission详解

    本文实例讲述了Android权限操作之uses-permission.分享给大家供大家参考,具体如下: 我们在安装Android软件的时候,系统会提示该软件所需要的权限,相对于其他系统,android ...

  9. android恢复联系人,如何从Android手机恢复联系人[最佳方式]

    有没有简单的方法 从Android设备恢复已删除/丢失的联系人? 各种原因将导致Android手机上的数据丢失. 例如,意外删除可能会导致电话号码丢失,而一些错误的操作也可能导致联系人丢失. 此外,技 ...

最新文章

  1. linux dev controlC0,关于Linux的alsa音频问题解决
  2. FEMS:微生物群落生态学数据挖掘的R包microeco
  3. scala的多种集合的使用(8)之队列和栈的操作方法
  4. How To Do @Async in Spring--转
  5. Android TimeAnimator
  6. 卡特兰数 HDU2067 HDU4165 HDU1134
  7. 数据结构思维 第十四章 持久化
  8. android获取mp3/mp4媒体信息
  9. Linux 设置交换分区
  10. python数学实验与建模pdf_Python数学实验与建模(4)
  11. 什么是人工智能(AI)数据平台?
  12. 《今日简史:人类命运大议题》的读后感范文3400字
  13. 学习CSS的background属性及其取值(实践)
  14. 如何设置Java环境变量
  15. linux文件操作和目录操作,Linux基础操作1——文件和目录
  16. android sdl编译
  17. 商城注册表单使用html
  18. 球场外也有比赛,央视影音逆袭世界杯,极速高清全靠腾讯云
  19. 全能赛道、热门方向、稀缺数据,“嬴彻-清华AIR杯”自动驾驶技术大赛火热开赛中
  20. 每日一题-正方形的判定

热门文章

  1. 海康威视道闸进出口LED屏DS-TVL224系列开发C#源码
  2. 咸鱼崩了上热搜,网友喊话程序员回来加班
  3. Adafruit_TFTLCD 类的方法属性详解与Arduino Uno实测记录-ILI9341 LCD driver
  4. 解密QQ消息文件格式
  5. 播放器技术分享(1):架构设计
  6. 彻底解决VS加载符号与查找PDB文件问题
  7. DCache-CacheServer分析(二)
  8. Gazebo仿真踩坑系列-乱飞、抖动等
  9. 启动OpenOffice服务
  10. 高校用电监控 Acrel-3000型电能管理系统的应用