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();
    }
}
Last modification:July 12th, 2020 at 07:52 pm