android通讯录开发<三> 增删改查(附Demo)
来源:互联网 发布:周继红 田亮 知乎 编辑:程序博客网 时间:2024/06/06 03:09
不废话,直接开撸
主要逻辑代码如下
单查询/增加联系人
/** * 写入手机联系人 */ 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
阅读全文
0 0
- android通讯录开发<三> 增删改查(附Demo)
- Android增删改查通讯录
- Android 通讯录增删改查
- 增删改查通讯录
- 通讯录增删改查
- 通讯录----- 增删改查
- 增删改查通讯录
- android 通讯录的增删改查
- Android入门:增删改查通讯录
- Android入门:增删改查通讯录
- Android入门:增删改查通讯录
- Android入门教程:增删改查通讯录
- Android入门:增删改查通讯录
- Android入门:增删改查通讯录
- Android入门:增删改查通讯录
- Android入门:增删改查通讯录
- Android入门:增删改查通讯录
- Android中增删改查通讯录
- 使用Vbox 搭建centos7 11.2.0.4 RAC
- 移动端摄像头
- angular实现httpget请求
- Python实战1——address_book.py
- 7-8 直捣黄龙(30 分)
- android通讯录开发<三> 增删改查(附Demo)
- 欢迎使用CSDN-markdown编辑器
- 【Tips】Javascript中多重数字数组扁平化处理
- [codevs2547]东方辉针城
- workerman安装——php拓展的安装
- uploadify的JS组件报错:Uncaught TypeError: Cannot read property 'queueData' of undefined
- IE8下table th和td宽度样式混乱解决办法
- Newton版cinder僵尸卷处理
- shell 常用命令