【通信录操作】
使用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 }