案例:往手机通讯录添加信息,输入姓名和手机号。
保存的手机的表:一共有两个,一个是主表,提供一个联系人id,另外是辅表,提供id对应的手机号和姓名。
普通操作:一个表一个表的添加
代码如下:
public void addContact(View view) {
// addContacts(getContentResolver(),new Contact("pansd","17864195555"));
Contact contact = new Contact("hello", "17864195555");
ContentResolver contentResolver = getContentResolver();
ContentValues values = new ContentValues();
// values.put("hello",contact.getName());
// values.put("phone",contact.getPhone());
//返回的是插入的id【插入主表】
Uri uri = contentResolver.insert(ContactsContract.RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(uri);
//插入关联表
ContentValues nameValue = new ContentValues();
//关联联系人编号
nameValue.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactId);
//关联姓名的数据类型
nameValue.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
//关联联系人的姓名
nameValue.put(ContactsContract.Contacts.Data.DATA2,contact.getName());
//插入关联表
contentResolver.insert(ContactsContract.Data.CONTENT_URI,nameValue);
ContentValues phoneValue = new ContentValues();
//关联联系人编号
phoneValue.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactId);
//关联电话号码的数据类型
phoneValue.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
//关联联系人的电话号码[1代表家庭 2代表工作]
phoneValue.put(ContactsContract.Contacts.Data.DATA1,contact.getPhone());
phoneValue.put(ContactsContract.Contacts.Data.DATA2, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
//插入关联表
contentResolver.insert(ContactsContract.Data.CONTENT_URI,phoneValue);
ContentValues emailValues = new ContentValues();
emailValues.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID,rawContactId);
emailValues.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
emailValues.put(ContactsContract.Contacts.Data.DATA1,"faskdfa@163.com");
emailValues.put(ContactsContract.Contacts.Data.DATA2, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
contentResolver.insert(ContactsContract.Data.CONTENT_URI,emailValues);
}
结果:
事务操作,添加联系人到主表和辅表
//事务操作【批处理操作】
public void addContacts2(ContentResolver contentResolver,Contact contact){
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
ContentProviderOperation op_main = ContentProviderOperation
.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build();
ops.add(op_main);
// 添加姓名信息
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, contact.getName())
.build());
// 添加电话号码信息
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getPhone())
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)
.build());
try {
// 执行批量操作
ContentProviderResult[] results = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException | OperationApplicationException e) {
e.printStackTrace();
}
}
通讯录的查询操作:
ContentResolver contentResolver = getContentResolver();
// 查询联系人数据
Cursor contactsCursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (contactsCursor != null && contactsCursor.getCount() > 0) {
while (contactsCursor.moveToNext()) {
String contactId = contactsCursor.getString(contactsCursor.getColumnIndex(ContactsContract.Contacts._ID));
String displayName = contactsCursor.getString(contactsCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// 查询电话号码
Cursor phoneCursor = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[]{contactId}, null);
if (phoneCursor != null && phoneCursor.moveToFirst()) {
String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
// 打印联系人姓名和电话号码
System.out.println("Name: " + displayName + ", Phone Number: " + phoneNumber);
phoneCursor.close();
}
}
contactsCursor.close();
}