package cn.test; 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.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.test.AndroidTestCase; import android.util.Log; public class TestContact extends AndroidTestCase { private static final String TAG = "TESTCONTACT"; private ContentResolver contentResolver; // 访问通讯录中的所有联系人 public void testContacts() { contentResolver = this.getContext().getContentResolver(); Uri allContactsUri = Uri.parse("content://com.android.contacts/contacts"); Cursor allContactsCursor = contentResolver.query(allContactsUri, null,null, null, null);// 从contacts表中得到所有联系人 StringBuilder builder = new StringBuilder(); while (allContactsCursor.moveToNext()) { int _id = allContactsCursor.getInt(allContactsCursor.getColumnIndex("_id")); builder.append("_id=" + _id).append(","); Uri perContactUri = Uri.parse("content://com.android.contacts/contacts/" + _id+ "/data"); Cursor perContactsCursor = contentResolver.query(perContactUri,null, null, null, null);// 得到某个id在data表中的所有数据 while (perContactsCursor.moveToNext()) { // 以下两句涉及到关联查询 data表和mimetype表进行 String data1 = perContactsCursor.getString(perContactsCursor.getColumnIndex("data1"));// 得到每个联系人的每个data1 String mimetype = perContactsCursor.getString(perContactsCursor.getColumnIndex("mimetype"));//判断此data1到底是什么含义 if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) { builder.append("phone=").append(data1).append(","); } else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) { builder.append("email=").append(data1).append(","); } else if ("vnd.android.cursor.item/name".equals(mimetype)) { builder.append("name=").append(data1).append(","); } } perContactsCursor.close(); } allContactsCursor.close(); Log.i(TAG, builder.toString()); } //根据电话号码查询出联系人的姓名 public void getNameByTele(){ contentResolver = this.getContext().getContentResolver(); Uri teleUri = Uri.parse("content://com.android.contacts/data/phones/filter/12345"); // 以下两句涉及到关联查询 data表和raw_contacts表 //Cursor oneContactCursor = contentResolver.query(teleUri, null,null, null, null); //name=oneContactCursor.getString(oneContactCursor.getColumnIndex("display_name")); Cursor oneContactCursor = contentResolver.query(teleUri, null,null, null, null); String name=""; while(oneContactCursor.moveToNext()){ name=oneContactCursor.getString(oneContactCursor.getColumnIndex("display_name")); } Log.i(TAG,name); } //向通讯录中添加联系人 //首先是更新raw_contacts表,表中有一个_id,然后再更新data表,把详细的信息放在此表中 //并不是先更新data表后更新raw_contacts表.因为data表中有一个外键raw_contact_id与表Raw_contacts的主键_id是一致的 //raw_contacts表中除了_id以外,其实都是在data表更新后才更新的. //第一步:我们向raw_contacts表中添加一条空的数据即可.为了得到其自动增长的主键_id //第二步:更新data表中的数据 //somebody's code public void testAddContact1() { //以下为第一步 Uri uri = Uri.parse("content://com.android.contacts/raw_contacts"); ContentResolver resolver = this.getContext().getContentResolver(); ContentValues values = new ContentValues(); Uri insertUri = resolver.insert(uri, values); long contactid = ContentUris.parseId(insertUri); //以下为第二步 values.clear(); values.put("raw_contact_id", contactid); values.put(ContactsContract.Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); values.put(StructuredName.GIVEN_NAME, "张三"); uri = Uri.parse("content://com.android.contacts/data"); resolver.insert(uri, values); values.clear(); values.put("raw_contact_id", contactid); values.put(ContactsContract.Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, "1386595955"); values.put(Phone.TYPE, Phone.TYPE_MOBILE); uri = Uri.parse("content://com.android.contacts/data"); resolver.insert(uri, values); values.clear(); values.put("raw_contact_id", contactid); values.put(ContactsContract.Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); values.put(Email.DATA, "test@sina.com"); values.put(Email.TYPE, Email.TYPE_HOME); uri = Uri.parse("content://com.android.contacts/data"); resolver.insert(uri, values); } //多个操作在同一个事务中执行 //要求对以上的几个操作用事务进行管理 //somebody's code 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 rawcontactOperation = ContentProviderOperation.newInsert(uri) .withValue("account_name", null).build(); operations.add(rawcontactOperation); uri = Uri.parse("content://com.android.contacts/data"); ContentProviderOperation dataOperation = ContentProviderOperation.newInsert(uri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/name") .withValue("data2", "李白").build(); operations.add(dataOperation); uri = Uri.parse("content://com.android.contacts/data"); dataOperation = ContentProviderOperation.newInsert(uri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/phone_v2") .withValue("data1", "1386595955") .withValue("data2", Phone.TYPE_MOBILE) .build(); operations.add(dataOperation); uri = Uri.parse("content://com.android.contacts/data"); dataOperation = ContentProviderOperation.newInsert(uri) .withValueBackReference("raw_contact_id", 0) .withValue("mimetype", "vnd.android.cursor.item/email_v2") .withValue("data1", "test@sina.com") .withValue("data2", Email.TYPE_HOME) .build(); operations.add(dataOperation); resolver.applyBatch("com.android.contacts", operations); } }
时间: 2024-12-22 04:57:10