Android 通信录中的联系人操作

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值