其实Google提供了许多常用Intent,可以方便的与系统应用交互,这里讲的是原始的方法
联系人数据库表较多,重要的是3个:
1、raw_contacts表,contact_id列存放联系人id2、data表,data1列存放姓名或数据或email,mimetype_id存放数据类型的字符串说明(可确定是到底存放的是name,number还是email),raw_contact_id存放联系人id
3、mimetypes表:根据字符串数据类别,对应的id含义:1-email,5-phone,7-name
注意需要读写联系人的权限
一、查询:
步骤:1.遍历raw_contact表,取出id
2.根据id在data表中取数据,相同id可取出姓名,电话,email
3.可根据mimetype_id在mimetypes表中查询是姓名,电话,还是email
★联系人被删除时,数据仍在数据库中,只是id被至为null
ContentResolver cr = getContentResolver(); //低版本路径不同,不适用,会出错
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");//raw_contacts表的uri
Uri dataUri = Uri.parse("content://com.android.contacts/data");//data表的uri
Cursor cursor = cr.query(uri, null, null, null, null);
while(cursor.moveToNext()){
//根据id取出数据
String id = cursor.getString(cursor.getColumnIndex("contact_id"));
if( id != null){//有的联系人被删除,id被至为null,会导致id值为null
Cursor datacursor = cr.query(dataUri, null, "raw_contact_id=?", new String[]{id}, null);
while(datacursor.moveToNext()){
String data1 = datacursor.getString(datacursor.getColumnIndex("data1"));//取得姓名,电话或email
String mime = datacursor.getString(datacursor.getColumnIndex("mimetype"));//取得数据类型的说明字符串 //这里并不是mimetype_id,其实查询的是一个视图,列名叫mimetype
System.out.println(data1);
System.out.println(mime);
}
datacursor.close();
System.out.println("-----------------------------------------");
}
}
cursor.close();
★可在查询字符串中加入and mimetype=?,将需要查询的类型字符串写入参数字符串数组,如:vnd.android.cursor.item/name 就可以只取得data1列数据为姓名的行,只取得联系人姓名
二、新增通讯录联系人
步骤:1.在raw_contacts表中增加id
2.使用此id在data表中插入数据
ContentResolver cr = getContentResolver();
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
//更新raw_contact表
ContentValues cv = new ContentValues();
Cursor cursor = cr.query(uri, new String[]{"_id"}, null, null, null);
cursor.moveToLast(); //移至最后一行,取得id,加1得到应插入行的id
int lastId = cursor.getInt(0);
int newId = lastId+1;
cv.put("contact_id", newId); //插入id
cr.insert(uri, cv);
//更新data表 电话
ContentValues num = new ContentValues();
num.put("data1", "81881");
num.put("mimetype", "vnd.android.cursor.item/phone_v2");
num.put("raw_contact_id", newId);
cr.insert(dataUri, num);
//邮箱
ContentValues email = new ContentValues();
email.put("data1", "123@qq.com");
email.put("mimetype", "vnd.android.cursor.item/email_v2");
email.put("raw_contact_id", newId);
cr.insert(dataUri, email);
//姓名
ContentValues name = new ContentValues();
name.put("data1", "Koma");
name.put("mimetype", "vnd.android.cursor.item/name");
name.put("raw_contact_id", newId);
cr.insert(dataUri, name);