Java代码 转:Android之通信录中的联系人操作_target 转:Android之通信录中的联系人操作_blank_02转:Android之通信录中的联系人操作_blank_03
  1. package cn.itcast.contact;    
  2. import java.util.ArrayList;    
  3. import android.content.ContentProviderOperation;    
  4. import android.content.ContentProviderResult;    
  5. import android.content.ContentResolver;    
  6. import android.content.ContentUris;    
  7. import android.content.ContentValues;    
  8. import android.database.Cursor;    
  9. import android.net.Uri;    
  10. import android.provider.ContactsContract;    
  11. import android.provider.ContactsContract.RawContacts;    
  12. import android.provider.ContactsContract.CommonDataKinds.Email;    
  13. import android.provider.ContactsContract.CommonDataKinds.Phone;    
  14. import android.provider.ContactsContract.CommonDataKinds.StructuredName;    
  15. import android.provider.ContactsContract.Contacts.Data;    
  16. import android.test.AndroidTestCase;    
  17. import android.util.Log;    
  18. public class ContactTest extends AndroidTestCase {    
  19. private static final String TAG = "ContactTest";    
  20. public void testGetAllContact() throws Throwable{    
  21.         Uri uri =  ContactsContract.Contacts.CONTENT_URI;    
  22.         ContentResolver contentResolver = this.getContext().getContentResolver();    
  23.         Cursor cursor = contentResolver.query(uri, null, null, null, null);    
  24. while(cursor.moveToNext()){    
  25.             StringBuilder sb = new StringBuilder();    
  26.             String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));      
  27.             String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));     
  28.             sb.append("contactId=").append(contactId).append(",name=").append(name);    
  29.             Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,      
  30. null,      
  31.                     ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,      
  32. null, null);      
  33. while(phones.moveToNext()){    
  34.                 String phoneNumber = phones.getString(phones.getColumnIndex(    
  35.                         ContactsContract.CommonDataKinds.Phone.NUMBER));    
  36.                 sb.append(",phone=").append(phoneNumber);    
  37.             }    
  38.             phones.close();    
  39.             Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,      
  40. null,      
  41.                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,      
  42. null, null);      
  43. while (emails.moveToNext()) {      
  44.                 String emailAddress = emails.getString(emails.getColumnIndex(    
  45.                         ContactsContract.CommonDataKinds.Email.DATA));    
  46.                 sb.append(",emailAddress=").append(emailAddress);    
  47.             }     
  48.             emails.close();    
  49.             Log.i(TAG, sb.toString());    
  50.         }    
  51.         cursor.close();    
  52.     }    
  53. /** 
  54.      * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId  
  55.      * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 
  56.      */
  57. public void testInsert() {    
  58.         ContentValues values = new ContentValues();    
  59. //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId   
  60.         Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);    
  61. long rawContactId = ContentUris.parseId(rawContactUri);    
  62. //往data表入姓名数据  
  63.         values.clear();    
  64.         values.put(Data.RAW_CONTACT_ID, rawContactId);     
  65.         values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型  
  66.         values.put(StructuredName.GIVEN_NAME, "李天山");    
  67. this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);    
  68. //往data表入电话数据  
  69.         values.clear();    
  70.         values.put(Data.RAW_CONTACT_ID, rawContactId);    
  71.         values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);    
  72.         values.put(Phone.NUMBER, "13921009789");    
  73.         values.put(Phone.TYPE, Phone.TYPE_MOBILE);    
  74. this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);    
  75. //往data表入Email数据  
  76.         values.clear();    
  77.         values.put(Data.RAW_CONTACT_ID, rawContactId);    
  78.         values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);    
  79.         values.put(Email.DATA, "liming@itcast.cn");    
  80.         values.put(Email.TYPE, Email.TYPE_WORK);    
  81. this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);    
  82.     }    
  83. //批量添加,处于同一个事务中  
  84. public void testSave() throws Throwable{    
  85. //文档位置:reference\android\provider\ContactsContract.RawContacts.html  
  86.         ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();    
  87. int rawContactInsertIndex = ops.size();    
  88.         ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)    
  89.                 .withValue(RawContacts.ACCOUNT_TYPE, null)    
  90.                 .withValue(RawContacts.ACCOUNT_NAME, null)    
  91.                 .build());    
  92. //文档位置:reference\android\provider\ContactsContract.Data.html  
  93.         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)    
  94.                 .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)    
  95.                 .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)    
  96.                 .withValue(StructuredName.GIVEN_NAME, "赵薇")    
  97.                 .build());    
  98.         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)    
  99.                  .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)    
  100.                  .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)    
  101.                  .withValue(Phone.NUMBER, "13671323809")    
  102.                  .withValue(Phone.TYPE, Phone.TYPE_MOBILE)    
  103.                  .withValue(Phone.LABEL, "手机号")    
  104.                  .build());    
  105.         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)    
  106.                  .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)    
  107.                  .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)    
  108.                  .withValue(Email.DATA, "liming@itcast.cn")    
  109.                  .withValue(Email.TYPE, Email.TYPE_WORK)    
  110.                  .build());    
  111.         ContentProviderResult[] results = this.getContext().getContentResolver()    
  112.             .applyBatch(ContactsContract.AUTHORITY, ops);    
  113. for(ContentProviderResult result : results){    
  114.             Log.i(TAG, result.uri.toString());    
  115.         }    
  116.     }    
  117. }   
package cn.itcast.contact; import java.util.ArrayList; import android.content.ContentProviderOperation; import android.content.ContentProviderResult; 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.RawContacts; import android.provider.ContactsContract.CommonDataKinds.Email; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.Contacts.Data; import android.test.AndroidTestCase; import android.util.Log; public class ContactTest extends AndroidTestCase { private static final String TAG = "ContactTest"; public void testGetAllContact() throws Throwable{ Uri uri = ContactsContract.Contacts.CONTENT_URI; ContentResolver contentResolver = this.getContext().getContentResolver(); Cursor cursor = contentResolver.query(uri, null, null, null, null); while(cursor.moveToNext()){ StringBuilder sb = new StringBuilder(); String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); sb.append("contactId=").append(contactId).append(",name=").append(name); Cursor phones = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); while(phones.moveToNext()){ String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); sb.append(",phone=").append(phoneNumber); } phones.close(); Cursor emails = contentResolver.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); while (emails.moveToNext()) { String emailAddress = emails.getString(emails.getColumnIndex( ContactsContract.CommonDataKinds.Email.DATA)); sb.append(",emailAddress=").append(emailAddress); } emails.close(); Log.i(TAG, sb.toString()); } cursor.close(); } /** * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见 */ public void testInsert() { ContentValues values = new ContentValues(); //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri); //往data表入姓名数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型 values.put(StructuredName.GIVEN_NAME, "李天山"); this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //往data表入电话数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE); values.put(Phone.NUMBER, "13921009789"); values.put(Phone.TYPE, Phone.TYPE_MOBILE); this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); //往data表入Email数据 values.clear(); values.put(Data.RAW_CONTACT_ID, rawContactId); values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE); values.put(Email.DATA, "liming@itcast.cn"); values.put(Email.TYPE, Email.TYPE_WORK); this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values); } //批量添加,处于同一个事务中 public void testSave() throws Throwable{ //文档位置:reference\android\provider\ContactsContract.RawContacts.html ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); int rawContactInsertIndex = ops.size(); ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI) .withValue(RawContacts.ACCOUNT_TYPE, null) .withValue(RawContacts.ACCOUNT_NAME, null) .build()); //文档位置:reference\android\provider\ContactsContract.Data.html ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) .withValue(StructuredName.GIVEN_NAME, "赵薇") .build()); ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE) .withValue(Phone.NUMBER, "13671323809") .withValue(Phone.TYPE, Phone.TYPE_MOBILE) .withValue(Phone.LABEL, "手机号") .build()); ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI) .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex) .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE) .withValue(Email.DATA, "liming@itcast.cn") .withValue(Email.TYPE, Email.TYPE_WORK) .build()); ContentProviderResult[] results = this.getContext().getContentResolver() .applyBatch(ContactsContract.AUTHORITY, ops); for(ContentProviderResult result : results){ Log.i(TAG, result.uri.toString()); } } }