您的位置:首页 > 移动开发 > Android开发

android通讯录开发<三> 增删改查(附Demo)

2017-10-13 18:29 393 查看

不废话,直接开撸

主要逻辑代码如下

单查询/增加联系人

/**
* 写入手机联系人
*/
private void writeContact() {
String name = "test";
String number = "13666668888";

//先查询要添加的号码是否已存在通讯录中, 不存在则添加. 存在则提示用户
Uri uri = Uri.parse("content://com.android.contacts/data/phones/filter/" + number);
ContentResolver resolver = getContentResolver();
//从raw_contact表中返回display_name
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data.DISPLAY_NAME}, null, null, null);
if (cursor == null)
return;

if (cursor.moveToFirst()) {
Log.i("nn", "name=" + cursor.getString(0));
Toast.makeText(this, "存在相同号码", Toast.LENGTH_SHORT).show();
} else {
uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentValues values = new ContentValues();
long contact_id = ContentUris.parseId(resolver.insert(uri, values));
//插入data表
uri = Uri.parse("content://com.android.contacts/data");
//add Name
values.put("raw_contact_id", contact_id);
values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/name");
values.put("data2", "qq");
values.put("data1", name);
resolver.insert(uri, values);
values.clear();

//add Phone
values.put("raw_contact_id", contact_id);
values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/phone_v2");
values.put("data2", "2");   //手机
values.put("data1", number);
resolver.insert(uri, values);
values.clear();

//add email
values.put("raw_contact_id", contact_id);
values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/email_v2");
values.put("data2", "1");   //邮箱
values.put("data1", "xxxx@qq.com");
resolver.insert(uri, values);
values.clear();

//add organization
values.put("raw_contact_id", contact_id);
values.put(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/organization");
values.put("data4", "产品经理");   //职务
values.put("data1", "腾讯科技");   //公司
resolver.insert(uri, values);
values.clear();

Toast.makeText(this, "插入号码成功", Toast.LENGTH_SHORT).show();
}
cursor.close();
}


注意: 使用魅族手机测试得到一个有趣的结果, 如果query时传入的只是一段短小的号码, 比如: 13612 那么会返回所有匹配包含到这各字段的结果, 例如有两个号码分别是 13612 99 8888 / 139 13612 888 .

那么最终查询则会返回号码存在的结果

删除联系人

/**
* 删除联系人
*/
private void deleteContact() {
String name = "test";

//根据姓名求id
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data._ID}, "display_name=?", new String[]{name}, null);
if (cursor == null)
return;

if (cursor.moveToFirst()) {
int id = cursor.getInt(0);
//根据id删除data中的相应数据
resolver.delete(uri, "display_name=?", new String[]{name});
uri = Uri.parse("content://com.android.contacts/data");
resolver.delete(uri, "raw_contact_id=?", new String[]{id + ""});
Toast.makeText(this, "删除号码成功", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "没有找到号码", Toast.LENGTH_SHORT).show();
}
cursor.close();
}


更改联系人

/**
* 更改联系人
*/
private void changeContact(){
String name = "test";
String newPhone = "13644440000";
//根据姓名求id
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, new String[]{ContactsContract.Data._ID}, "display_name=?", new String[]{name}, null);
if (cursor == null)
return;

if (cursor.moveToFirst()) {
int id = cursor.getInt(0);
ContentValues values = new ContentValues();
values.put("data1", newPhone);
resolver.update(uri, values, "mimetype=? and raw_contact_id=?", new String[]{"vnd.android.cursor.item/phone_v2", id + ""});
}else{
Toast.makeText(this, "没有找到号码", Toast.LENGTH_SHORT).show();
}
cursor.close();
}


列表查询

private List<HashMap<String, String>> mContactList = new ArrayList<>();

/**
* 查询手机联系人并显示
*/
private void queryContactsShowData() {
mContactList.clear();
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
if (cursor == null)
return;
while (cursor.moveToNext()) {
String phoneName;
String phoneNumber;
HashMap<String, String> listItem = new HashMap<>();
phoneName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
phoneNumber = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
listItem.put("phoneName", phoneName);
listItem.put("phoneNumber", phoneNumber);
mContactList.add(listItem);
}

cursor.close();

mRv.setAdapter(new ContactAdapter());
mRv.setLayoutManager(new LinearLayoutManager(mContext));

}


附上测试的Demo

https://gitee.com/geekqian/ContactDemo/tree/master
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 通讯录