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;
import android.util.Log;
public class ContastsTest extends AndroidTestCase {
private static final String TAG = "ContastsTest";
/**
* 查询手机联系人信息包括:姓名、电话、邮件
*/
public void testContacts() throws Exception {
Uri uri = Uri.parse("content://com.android.contacts/contacts");
ContentResolver resolver = getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[] { "_id" }, null, null,
null);
while (cursor.moveToNext()) {
int contactid = cursor.getInt(0);
StringBuilder sb = new StringBuilder();
sb.append("contactid=" + contactid);
uri = Uri.parse("content://com.android.contacts/contacts/"
+ contactid + "/data");
Cursor datacursor = resolver.query(uri, new String[] { "mimetype",
"data1", "data2" }, null, null, null);
while (datacursor.moveToNext()) {
String data = datacursor.getString(datacursor
.getColumnIndex("data1"));
String mimetypetype = datacursor.getString(datacursor
.getColumnIndex("mimetype"));
// 判断数据类型name:表示是姓名;email_v2:表示是email邮件;phone_v2:表示是电话
if ("vnd.android.cursor.item/name".equals(mimetypetype)) {
sb.append("name=" + data);
} else if ("vnd.android.cursor.item/email_v2"
.equals(mimetypetype)) {
sb.append("email=" + data);
} else if ("vnd.android.cursor.item/phone_v2"
.equals(mimetypetype)) {
sb.append("phone=" + data);
}
}
Log.i(TAG, sb.toString());
}
}
/**
* 根据手机号码获取联系人的姓名
*/
public void testContactsNameByNumber() throws Exception {
String number = "15021868030";
Uri uri = Uri
.parse("content://com.android.contacts/data/phones/filter/"
+ number);
ContentResolver resolver = this.getContext().getContentResolver();
Cursor cursor = resolver.query(uri, new String[] { "display_name" },
null, null, null);
if (cursor.moveToNext()) {
String name = cursor.getString(0);
Log.i(TAG, name);
}
cursor.close();
}
/**
* 添加联系人
*/
public void testAddContacts() throws Exception {
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = this.getContext().getContentResolver();
ContentValues values = new ContentValues();
long contactid = ContentUris.parseId(resolver.insert(uri, values));
// 添加姓名
uri = Uri.parse("content://com.android.contacts/data");
values.put("raw_contact_id", contactid);
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("data2", "李宏涛");
resolver.insert(uri, values);
// 添加电话
values.clear();
values.put("raw_contact_id", contactid);
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("data2", "2");// 区分座机和手机类型
values.put("data1", "15021868030");
resolver.insert(uri, values);
// 添加EMAIL
values.clear();
values.put("raw_contact_id", contactid);
values.put("mimetype", "vnd.android.cursor.item/email_v2");
values.put("data2", "2");// 2:表示单位email
values.put("data1", "ht896632@msn.com");
resolver.insert(uri, values);
}
/**
* 在同一个事务中完成联系人各项的操作
*/
public void testAddContact2() throws Exception {
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = this.getContext().getContentResolver();
ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
ContentProviderOperation cpo1 = ContentProviderOperation.newInsert(uri)
.withValue("account_name", null).build();// 存放谷歌的登录账号
operations.add(cpo1);
// 添加姓名
uri = Uri.parse("content://com.android.contacts/data");
ContentProviderOperation cpo2 = ContentProviderOperation.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
// 使用第一条记录添加完后返回的ID做为这条记录的值
.withValue("mimetype", "vnd.android.cursor.item/name")
.withValue("data2", "卡卡").build();
operations.add(cpo2);
// 添加电话
ContentProviderOperation cpo3 = ContentProviderOperation
.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
// 使用第一条记录添加完后返回的ID做为这条记录的值
.withValue("mimetype", "vnd.android.cursor.item/phone_v2")
.withValue("data2", "2").withValue("data1", "15021868030")
.build();
operations.add(cpo3);
// 添加EMAIL
ContentProviderOperation cpo4 = ContentProviderOperation
.newInsert(uri)
.withValueBackReference("raw_contact_id", 0)
// 使用第一条记录添加完后返回的ID做为这条记录的值
.withValue("mimetype", "vnd.android.cursor.item/email_v2")
.withValue("data2", "2").withValue("data1", "ht896632@msn.com")
.build();
operations.add(cpo4);
resolver.applyBatch("com.android.contacts", operations);
}
}
注:添加联系人需要在项目清单中加入权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />