1.读取联系人信息
1.1获取权限
//Check permission of read contact
public void checkPermission() {
if (ContextCompat.checkSelfPermission(getBaseContext(), android.Manifest.permission.READ_CONTACTS) !=
PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS
, Manifest.permission.WRITE_CONTACTS}, 1);
} else {
loadAllContact();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
List<Integer> list = new ArrayList<>();
if (list.contains(PackageManager.PERMISSION_DENIED)) {
Toast.makeText(this, "Please give all the permissions.", Toast.LENGTH_SHORT).show();
checkPermission();
} else {
loadAllContact();
}
}
1.2读取联系人信息
public void loadAllContact() {
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
List<String> list = new ArrayList<>();
while (cursor.moveToNext()) {
//Name
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
//Phone
String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
list.add((name + "\r\n" + phone));
}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_list_item_1, list);
lv.setAdapter(adapter);
}
2.添加联系人信息
Type1
void addNewContact(String name, String phone) {
ContentValues values = new ContentValues();
//添加一个raw_contact空数据
Uri rawContactUri = getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI, values);
//获取新添加联系人的rawContactId,后边会用到
long rawContactId = ContentUris.parseId(rawContactUri);
values.clear();
//1.联系人姓名
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
//内容类型
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, name);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
values.clear();
//2.联系人电话
values.put(ContactsContract.Contacts.Data.RAW_CONTACT_ID, rawContactId);
//内容类型
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
//电话类型
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
//3.邮箱
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Email.DATA, "test@xxx.com");
// 电子邮件的类型
values.put(ContactsContract.CommonDataKinds.Email.TYPE, CommonDataKinds.Email.TYPE_WORK);
// 向联系人Email URI添加Email数据
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
Toast.makeText(MainActivity.this, "Add successfully.", Toast.LENGTH_SHORT).show();
}
Type2
void addContact2(String name, String phone) {
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null) // 此处传入null添加一个raw_contact空数据
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) // RAW_CONTACT_ID是第一个事务添加得到的,因此这里传入0,applyBatch返回的ContentProviderResult[]数组中第一项
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
.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, phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK)
.build());
try {
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
} catch (RemoteException e) {
e.printStackTrace();
} catch (OperationApplicationException e) {
e.printStackTrace();
}
}
One comment