android16

【通信录操作】

使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作:
加入读写联系人信息的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

  1 加入读取联系人信息的权限
  2 <uses-permission android:name="android.permission.READ_CONTACTS"/>
  3 
  4 content://com.android.contacts/contacts 操作的数据是联系人信息Uri
  5 content://com.android.contacts/data/phones 联系人电话Uri
  6 content://com.android.contacts/data/emails 联系人Email Uri
  7 
  8 读取联系人信息
  9 Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,  
 10     null, null, null, null);  
 11   while (cursor.moveToNext()) {  
 12    String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));  
 13    String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));  
 14    
 15    Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,  
 16         null,  
 17         ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,  
 18         null, null);  
 19     while (phones.moveToNext()) {  
 20      String phoneNumber = phones.getString(phones.getColumnIndex(  
 21          ContactsContract.CommonDataKinds.Phone.NUMBER));  
 22      Log.i("RongActivity", "phoneNumber="+phoneNumber);
 23     }  
 24     phones.close();  
 25    
 26     Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,  
 27        null,  
 28        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId,  
 29        null, null);  
 30        while (emails.moveToNext()) {  
 31         // This would allow you get several email addresses  
 32         String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
 33         Log.i("RongActivity", "emailAddress="+ emailAddress);
 34        }  
 35        emails.close();  
 36   }  
 37   cursor.close(); 
 38 
 39 ==================== 添加联系人 ===========================
 40 方法一:
 41     /**
 42      * 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
 43      * 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
 44      */
 45     public void testInsert() {
 46         ContentValues values = new ContentValues();
 47         //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId 
 48         Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
 49         long rawContactId = ContentUris.parseId(rawContactUri);
 50         //往data表入姓名数据
 51         values.clear();
 52         values.put(Data.RAW_CONTACT_ID, rawContactId); 
 53         values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);//内容类型
 54         values.put(StructuredName.GIVEN_NAME, "李天山");
 55         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
 56         //往data表入电话数据
 57         values.clear();
 58         values.put(Data.RAW_CONTACT_ID, rawContactId);
 59         values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
 60         values.put(Phone.NUMBER, "13921009789");
 61         values.put(Phone.TYPE, Phone.TYPE_MOBILE);
 62         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
 63         //往data表入Email数据
 64         values.clear();
 65         values.put(Data.RAW_CONTACT_ID, rawContactId);
 66         values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
 67         values.put(Email.DATA, "liming@itcast.cn");
 68         values.put(Email.TYPE, Email.TYPE_WORK);
 69         this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
 70     }
 71 
 72 方法二:批量添加,处于同一个事务中
 73     public void testSave() throws Throwable{
 74         //文档位置:reference\android\provider\ContactsContract.RawContacts.html
 75         ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
 76         int rawContactInsertIndex = 0;
 77         ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
 78                 .withValue(RawContacts.ACCOUNT_TYPE, null)
 79                 .withValue(RawContacts.ACCOUNT_NAME, null)
 80                 .build());
 81         //文档位置:reference\android\provider\ContactsContract.Data.html
 82         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
 83                 .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
 84                 .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
 85                 .withValue(StructuredName.GIVEN_NAME, "赵薇")
 86                 .build());
 87         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
 88                  .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
 89                  .withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
 90                  .withValue(Phone.NUMBER, "13671323809")
 91                  .withValue(Phone.TYPE, Phone.TYPE_MOBILE)
 92                  .withValue(Phone.LABEL, "手机号")
 93                  .build());
 94         ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
 95                  .withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
 96                  .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
 97                  .withValue(Email.DATA, "liming@itcast.cn")
 98                  .withValue(Email.TYPE, Email.TYPE_WORK)
 99                  .build());
100         ContentProviderResult[] results = this.getContext().getContentResolver()
101             .applyBatch(ContactsContract.AUTHORITY, ops);
102         for(ContentProviderResult result : results){
103             Log.i(TAG, result.uri.toString());
104         }
105     }
View Code
原文地址:https://www.cnblogs.com/Miami/p/3138922.html