随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

在使用ContentProvider管理联系人一文中介绍了对联系人的增加、查询。在本文将补充对联系人的修改和删除操作。下面使用到的contactId均是在基本表即ContactsContract.Contacts.CONTENT_URI里面查询出来的ID,代码如下:

删除联系人信息:

 /*** 删除联系人信息* * @param contactId* @return*/public int deleteContact(int contactId) {Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);int count = getContentResolver().delete(uri, null, null);return count;}

修改联系人姓名:

 /*** 修改联系人姓名* * @param contactId* @param name* @return*/public int updateContactName(int contactId, String name) {ContentValues values = new ContentValues();int index = name.length() / 2;String displayName = name;String givenName = null;String familyName = null;values.clear();// 检查是否是英文名称if (TextUtil.isEnglishName(displayName) == false) {givenName = name.substring(index);familyName = name.substring(0, index);} else {givenName = familyName = displayName;}values.put(StructuredName.DISPLAY_NAME, displayName);values.put(StructuredName.GIVEN_NAME, givenName);values.put(StructuredName.FAMILY_NAME, familyName);int count = getContentResolver().update(ContactsContract.Data.CONTENT_URI,values,ContactsContract.Data.CONTACT_ID + "=?" + "AND "+ ContactsContract.Data.MIMETYPE + " = ?",new String[] { contactId + "",StructuredName.CONTENT_ITEM_TYPE });return count;}

当然增、删、改、查都可以使用ContentProviderOperation类来完成,如:

修改手机号码:

 /*** 修改手机号码* * @param contactId* @param number*/public void updateContactNumber(int contactId, String number) {ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI).withSelection(ContactsContract.Data.CONTACT_ID+ "=?"+ " AND "+ ContactsContract.Data.MIMETYPE+ "=?"+ " AND "+ ContactsContract.CommonDataKinds.Organization.TYPE+ "=?",new String[] {contactId + "",ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,String.valueOf(ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) }).withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,number).build());try {getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);} catch (RemoteException e) {e.printStackTrace();} catch (OperationApplicationException e) {e.printStackTrace();}}

TextUtil工具类:

package com.home.util;public class TextUtil {/*** 检查是否是英文名称* * @param name* @return*/public static boolean isEnglishName(String name) {char[] nameChars = name.toCharArray();for (int i = 0; i < nameChars.length; i++) {if ((nameChars[i] >= 'a' && nameChars[i] <= 'z')|| (nameChars[i] >= 'A' && nameChars[i] <= 'Z')) {continue;}return false;}return true;}
}

另外补充完善一下添加联系人(之前在使用ContentProvider管理联系人一文中的添加方法不完善):

/*** 新增联系人* * @param name* @param number*/public void addContact(String name, String number) {ContentValues contentValues = new ContentValues();Uri uri = getContentResolver().insert(RawContacts.CONTENT_URI,contentValues);long rowId = ContentUris.parseId(uri);// 插入姓名if (name != null) {contentValues.clear();contentValues.put(Data.RAW_CONTACT_ID, rowId);contentValues.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);int index = name.length() / 2;String displayName = name;String givenName = null;String familyName = null;// 检查是否是英文名称if (TextUtil.isEnglishName(displayName) == false) {givenName = name.substring(index);familyName = name.substring(0, index);} else {givenName = familyName = displayName;}contentValues.put(StructuredName.DISPLAY_NAME, displayName);contentValues.put(StructuredName.GIVEN_NAME, givenName);contentValues.put(StructuredName.FAMILY_NAME, familyName);getContentResolver().insert(ContactsContract.Data.CONTENT_URI,contentValues);}if (number != null) {// 插入手机电话contentValues.clear();contentValues.put(Data.RAW_CONTACT_ID, rowId);contentValues.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);contentValues.put(Phone.NUMBER, number);contentValues.put(Phone.TYPE, Phone.TYPE_MOBILE);getContentResolver().insert(ContactsContract.Data.CONTENT_URI,contentValues);}}

管理系统联系人之补充相关推荐

  1. 领域应用 | 图数据库及其在恒昌的应用简介

    首发于知乎专栏知识图谱和智能问答,作者为量子胖比特. 背景 历史上,多数企业级应用都运行在一个关系型数据库上(RDBMS),近年来,随着数据存储技术的飞速发展,关系型数据库在灵活性和可伸缩性方面不再处 ...

  2. web服务面试python_Python面试重点(web篇)

    写出常用的bootstrap的样式. 导航栏,表单,轮播图,下拉菜单 什么是响应式布局? 响应式布局就是一个网站能够兼容多个终端,而不是为每个终端做一个特定的版本. 优点:灵活性强,能解决多设备显示问 ...

  3. mysql fn_2019 数据库趋势报告,最受欢迎的是 MySQL

    本文最初发布于 ScaleGrid 的博客,经授权由 InfoQ 中文站翻译并分享. 哪些数据库是 2019 年的"大势"?在 DeveloperWeek 上,我们询问了数百名开发 ...

  4. 2019数据库趋势报告,最受欢迎的是MySQL

    本文最初发布于ScaleGrid的博客,经授权由InfoQ中文站翻译并分享. 哪些数据库是2019年的"大势"?在DeveloperWeek上,我们询问了数百名开发人员.工程师.软 ...

  5. ORACLE 培训教程(1)

    ORACLE系统概述 ORACLE公司自86年推出版本5开始,系统具有分布数据库处理功能.88年推出版本6,ORACLE RDBMS(V6.0)可带事务处理选项(TPO),提高了事务处理的速度.199 ...

  6. 用c语言编写智能停车系统,浅谈:智能停车系统设计是什么

    目前,随着我国经济的高速发展,大家的生活水平都有所提升,而汽车市场的繁荣也引发出停车的难题.据了解,根据我国机动车数量与停车位之比,以及国外发达国家停车产业的发展来看,停车难问题催生出了一个巨大的智能 ...

  7. 华为G520联通版解锁,ROOT,RECOVERY、卡刷及删除定制软件教程

    一.解锁 为何解锁? 因为华为G520 的bootloader 默认是上锁的,防止机友刷机,必须先解锁后,才能刷入第三方recovery 进行刷机 . 解锁是永久的,只需要解锁一次   (当然你也可以 ...

  8. 企业移动应用是个虚假市场?

    现在一谈起移动互联网大家都说这铁定是未来,大量软件公司也都重心投在移动应用的新品研发上.但我在各大CIO QQ群组织多次讨论移动应用的规划/立项/应用.我在Apple AppStore中分析了各细项畅 ...

  9. 华厦眼科在创业板上市:市值达390亿元,前三季度收入约为25亿元

    11月7日,华厦眼科医院集团股份有限公司(下称"华厦眼科",SZ:301267)在深圳证券交易所创业板上市.本次上市,华厦眼科共计发行6000万股,发行价为50.88元/股,发行市 ...

最新文章

  1. 【知识强化】第二章 进程管理 2.1 进程与线程
  2. P1063 能量项链
  3. android万年历有什么作用,基于android的万年历农历怎么算
  4. Nginx_负载均衡配置讲解
  5. 复旦提出GaitSet算法,步态识别的重大突破!
  6. 两个for做数据插入_冒泡排序、选择排序、插入排序
  7. 使用LDA模型对新的文档进行分类
  8. GitHub 热点速览:不可思议的浏览器 Browser-2020 周涨 Star 超 3 千
  9. 冲刺周期二--站立会议03
  10. QueryRunner类
  11. 淘淘商城规格参数列表显示
  12. xss漏洞java代码_Java处理XSS漏洞的工具类代码
  13. Java随机数的使用
  14. ffmpeg转码保留时间戳
  15. 什么是ISBN码及如何制作
  16. ceph osd学习小结
  17. 5. 列表、元组和集合
  18. 矩阵对角化,SVD分解
  19. Adobe Premiere Pro CS6打开报错(Oxc000007b)解决办法
  20. 检测蛋白质构象是否合理————Ramachandran plot(拉氏图)

热门文章

  1. 从玩法、叙事、主题三个角度浅要谈谈《死亡搁浅》的好与坏
  2. 每天一个新知识之Linux的LVM逻辑卷管理
  3. Sparrow: 适用于细粒度tasks低延迟调度的去中心化无状态分布式调度器
  4. 云闪付怎么对接三方php,第三方支付-银联云闪付开发教程
  5. 七零年代摄影师Robert Mapplethorpe
  6. HTML页面编写中常遇到的bug
  7. 提升工作效率的常用mac命令行
  8. htc 8x android,HTC 8X正式发布 4.3寸屏支持NFC
  9. 2017华为软件精英挑战赛小结
  10. 弹幕调试 jquery.danmu.js