weiyi通讯录(二)获取联系人信息包括头像 增删改查功能,

本文主要是介绍weiyi通讯录(二)获取联系人信息包括头像 增删改查功能,,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看了下第一期的访问量,100都没有可能很多人不需要吧,之前跟过一个大神学做项目,他都不吧核心代码告诉我,感觉没有一点分享精神,所以我就自己做。没跟他一起做

这里把上次的代码分享一下 我这里分享的跟我博客里面可能不一样因为我已经做完第一个模块了,代码就没有分开了

第一期的代码地址:http://download.csdn.net/detail/u010982856/8232855

分享的是类似的代码 基本跟我的是一样。如果需要的联系人我把 或者加入我的交流群吧

-----------欢迎加入交流群 386451316 有问题一起讨论吧

还废话一下 这期的代码需要在下一期公布地址

开始代码了  布局文件就不写了 这期说得是联系人的问题  在源代码中有相应代码  我也参考了一些 

源代码地址:sdk\sources\android-16\com\android\internal\telephony\ 里面是通讯录的所有操作

写一个bean来存放联系人信息(这就一废话是把)

package com.zw.weiyi.enety;
import android.graphics.Bitmap;
public class Person {private Long id;//联系人idpublic String name;//联系人名字public String phoneNumber;//联系人号码private Long iconId;//头像idprivate Bitmap icon;//头像private String sortLetters;  //显示数据拼音的首字母public String getSortLetters() {return sortLetters;}public void setSortLetters(String sortLetters) {this.sortLetters = sortLetters;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}public Long getIconId() {return iconId;}public void setIconId(Long iconId) {this.iconId = iconId;}public Bitmap getIcon() {return icon;}public void setIcon(Bitmap icon) {this.icon = icon;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPhoneNumber() {return phoneNumber;}public void setPhoneNumber(String phoneNumber) {this.phoneNumber = phoneNumber;}
}
这里获取联系人方式有多种  一般很多人会使用AsyncQueryHandler asyncQueryHandler; // 异步查询数据库类对象

这种比较好一点  但我没有用这种 我使用的内容提供者 ContentResolver 来获取  这种更新能力不好

上代码吧 只传了核心代码 我觉得有这些就够了

// 查询条件public final static String[] PHONES_PROJECTION = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID, Phone.CONTACT_ID };
<span style="white-space:pre">	</span>
<span style="white-space:pre">	</span>//得到联系人的数据
<span style="white-space:pre">	</span>public List<Person> initContacts() {
<span style="white-space:pre">		</span>resolver = context.getContentResolver();
<span style="white-space:pre">		</span>cursor = context.getContentResolver().query(Phone.CONTENT_URI,
<span style="white-space:pre">				</span>PHONES_PROJECTION, null, null, null);
<span style="white-space:pre">		</span>personSize = cursor.getCount();
<span style="white-space:pre">		</span>pAdapter = new personAdapter(context,personsList);
<span style="white-space:pre">		</span>Person person = null;
<span style="white-space:pre">		</span>if (cursor != null) {
<span style="white-space:pre">			</span>for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor
<span style="white-space:pre">					</span>.moveToNext()) {
<span style="white-space:pre">				</span>person = new Person();
<span style="white-space:pre">				</span>person.setName(cursor.getString(0));
<span style="white-space:pre">				</span>person.setPhoneNumber(cursor.getString(1));
<span style="white-space:pre">				</span>// 头像id
<span style="white-space:pre">				</span>person.setIconId(cursor.getLong(2));
<span style="white-space:pre">				</span>// 联系人id
<span style="white-space:pre">				</span>person.setId(cursor.getLong(3));
<span style="white-space:pre">				</span>if (cursor.getLong(2) > 0) { // 头像默认为0
<span style="white-space:pre">					</span>Uri uri = ContentUris.withAppendedId(
<span style="white-space:pre">							</span>ContactsContract.Contacts.CONTENT_URI,
<span style="white-space:pre">							</span>person.getId());
<span style="white-space:pre">					</span>InputStream input = ContactsContract.Contacts
<span style="white-space:pre">							</span>.openContactPhotoInputStream(resolver, uri);
<span style="white-space:pre">					</span>person.setIcon(BitmapFactory.decodeStream(input));
<span style="white-space:pre">				</span>} else {// 没有则默认
<span style="white-space:pre">					</span>person.setIcon(BitmapFactory.decodeResource(getResources(),
<span style="white-space:pre">							</span>R.drawable.ic_launcher));
<span style="white-space:pre">				</span>}
<span style="white-space:pre">				</span>personsList.add(person);
<span style="white-space:pre">			</span>}
<span style="white-space:pre">		</span>}
<span style="white-space:pre">		</span>cursor.close();
<span style="white-space:pre">		</span>return personsList;
<span style="white-space:pre">	</span>}

这里再说一下操作的问题吧
插入联系人 这里插入的是手机里面的

	public void inster(String addnames, String addnames2, String addpnone,String addohter) throws Exception {uri = Uri.parse("content://com.android.contacts/raw_contacts");ContentResolver resolver = this.getContentResolver();ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();ContentProviderOperation op1 = ContentProviderOperation.newInsert(uri).withValue("account_name", null).build();operations.add(op1);if (!TextUtils.isEmpty(addnames)) {// 为空uri = Uri.parse("content://com.android.contacts/data");ContentProviderOperation op2 = ContentProviderOperation.newInsert(uri).withValueBackReference("raw_contact_id", 0).withValue("mimetype", "vnd.android.cursor.item/name").withValue("data1", addnames+addnames2).build();operations.add(op2);}if (!TextUtils.isEmpty(addpnone)) {ContentProviderOperation op3 = ContentProviderOperation.newInsert(uri).withValueBackReference("raw_contact_id", 0).withValue("mimetype","vnd.android.cursor.item/phone_v2").withValue("data1", addpnone).build();operations.add(op3);}// 邮箱if (!TextUtils.isEmpty(addohter)) {ContentProviderOperation op4 = ContentProviderOperation.newInsert(uri).withValueBackReference("raw_contact_id", 0).withValue("mimetype","vnd.android.cursor.item/email_v2").withValue("data1", addohter).build();operations.add(op4);}resolver.applyBatch("com.android.contacts", operations);Toast.makeText(this, "添加成功", 1000).show();			}

删除 更新啊什么就一起说了

	// 删除联系人public void deleteContact(long rawContactId) {getContentResolver().delete(ContentUris.withAppendedId(RawContacts.CONTENT_URI,rawContactId), null, null);}// 更新联系人public void updataCotact(long rawContactId) {ContentValues values = new ContentValues();values.put(Phone.NUMBER, "13800138000");values.put(Phone.TYPE, Phone.TYPE_MOBILE);String where = ContactsContract.Data.RAW_CONTACT_ID + "=? AND "+ ContactsContract.Data.MIMETYPE + "=?";String[] selectionArgs = new String[] { String.valueOf(rawContactId),Phone.CONTENT_ITEM_TYPE };getContentResolver().update(ContactsContract.Data.CONTENT_URI, values,where, selectionArgs);}

基本都有了,代码就不上传了把 下次一起上传把


这篇关于weiyi通讯录(二)获取联系人信息包括头像 增删改查功能,的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1005681

相关文章

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Golang如何用gorm实现分页的功能

《Golang如何用gorm实现分页的功能》:本文主要介绍Golang如何用gorm实现分页的功能方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录背景go库下载初始化数据【1】建表【2】插入数据【3】查看数据4、代码示例【1】gorm结构体定义【2】分页结构体

MySQL 获取字符串长度及注意事项

《MySQL获取字符串长度及注意事项》本文通过实例代码给大家介绍MySQL获取字符串长度及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 获取字符串长度详解 核心长度函数对比⚠️ 六大关键注意事项1. 字符编码决定字节长度2

python3如何找到字典的下标index、获取list中指定元素的位置索引

《python3如何找到字典的下标index、获取list中指定元素的位置索引》:本文主要介绍python3如何找到字典的下标index、获取list中指定元素的位置索引问题,具有很好的参考价值,... 目录enumerate()找到字典的下标 index获取list中指定元素的位置索引总结enumerat

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

springboot下载接口限速功能实现

《springboot下载接口限速功能实现》通过Redis统计并发数动态调整每个用户带宽,核心逻辑为每秒读取并发送限定数据量,防止单用户占用过多资源,确保整体下载均衡且高效,本文给大家介绍spring... 目录 一、整体目标 二、涉及的主要类/方法✅ 三、核心流程图解(简化) 四、关键代码详解1️⃣ 设置

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

C++中RAII资源获取即初始化

《C++中RAII资源获取即初始化》RAII通过构造/析构自动管理资源生命周期,确保安全释放,本文就来介绍一下C++中的RAII技术及其应用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、核心原理与机制二、标准库中的RAII实现三、自定义RAII类设计原则四、常见应用场景1. 内存管理2. 文件操