管理系统联系人之补充
随时随地技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(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);}}
管理系统联系人之补充相关推荐
- 领域应用 | 图数据库及其在恒昌的应用简介
首发于知乎专栏知识图谱和智能问答,作者为量子胖比特. 背景 历史上,多数企业级应用都运行在一个关系型数据库上(RDBMS),近年来,随着数据存储技术的飞速发展,关系型数据库在灵活性和可伸缩性方面不再处 ...
- web服务面试python_Python面试重点(web篇)
写出常用的bootstrap的样式. 导航栏,表单,轮播图,下拉菜单 什么是响应式布局? 响应式布局就是一个网站能够兼容多个终端,而不是为每个终端做一个特定的版本. 优点:灵活性强,能解决多设备显示问 ...
- mysql fn_2019 数据库趋势报告,最受欢迎的是 MySQL
本文最初发布于 ScaleGrid 的博客,经授权由 InfoQ 中文站翻译并分享. 哪些数据库是 2019 年的"大势"?在 DeveloperWeek 上,我们询问了数百名开发 ...
- 2019数据库趋势报告,最受欢迎的是MySQL
本文最初发布于ScaleGrid的博客,经授权由InfoQ中文站翻译并分享. 哪些数据库是2019年的"大势"?在DeveloperWeek上,我们询问了数百名开发人员.工程师.软 ...
- ORACLE 培训教程(1)
ORACLE系统概述 ORACLE公司自86年推出版本5开始,系统具有分布数据库处理功能.88年推出版本6,ORACLE RDBMS(V6.0)可带事务处理选项(TPO),提高了事务处理的速度.199 ...
- 用c语言编写智能停车系统,浅谈:智能停车系统设计是什么
目前,随着我国经济的高速发展,大家的生活水平都有所提升,而汽车市场的繁荣也引发出停车的难题.据了解,根据我国机动车数量与停车位之比,以及国外发达国家停车产业的发展来看,停车难问题催生出了一个巨大的智能 ...
- 华为G520联通版解锁,ROOT,RECOVERY、卡刷及删除定制软件教程
一.解锁 为何解锁? 因为华为G520 的bootloader 默认是上锁的,防止机友刷机,必须先解锁后,才能刷入第三方recovery 进行刷机 . 解锁是永久的,只需要解锁一次 (当然你也可以 ...
- 企业移动应用是个虚假市场?
现在一谈起移动互联网大家都说这铁定是未来,大量软件公司也都重心投在移动应用的新品研发上.但我在各大CIO QQ群组织多次讨论移动应用的规划/立项/应用.我在Apple AppStore中分析了各细项畅 ...
- 华厦眼科在创业板上市:市值达390亿元,前三季度收入约为25亿元
11月7日,华厦眼科医院集团股份有限公司(下称"华厦眼科",SZ:301267)在深圳证券交易所创业板上市.本次上市,华厦眼科共计发行6000万股,发行价为50.88元/股,发行市 ...
最新文章
- 【知识强化】第二章 进程管理 2.1 进程与线程
- P1063 能量项链
- android万年历有什么作用,基于android的万年历农历怎么算
- Nginx_负载均衡配置讲解
- 复旦提出GaitSet算法,步态识别的重大突破!
- 两个for做数据插入_冒泡排序、选择排序、插入排序
- 使用LDA模型对新的文档进行分类
- GitHub 热点速览:不可思议的浏览器 Browser-2020 周涨 Star 超 3 千
- 冲刺周期二--站立会议03
- QueryRunner类
- 淘淘商城规格参数列表显示
- xss漏洞java代码_Java处理XSS漏洞的工具类代码
- Java随机数的使用
- ffmpeg转码保留时间戳
- 什么是ISBN码及如何制作
- ceph osd学习小结
- 5. 列表、元组和集合
- 矩阵对角化,SVD分解
- Adobe Premiere Pro CS6打开报错(Oxc000007b)解决办法
- 检测蛋白质构象是否合理————Ramachandran plot(拉氏图)