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

相关文章

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

基于Java和FFmpeg实现视频压缩和剪辑功能

《基于Java和FFmpeg实现视频压缩和剪辑功能》在视频处理开发中,压缩和剪辑是常见的需求,本文将介绍如何使用Java结合FFmpeg实现视频压缩和剪辑功能,同时去除数据库操作,仅专注于视频处理,需... 目录引言1. 环境准备1.1 项目依赖1.2 安装 FFmpeg2. 视频压缩功能实现2.1 主要功

使用Python实现无损放大图片功能

《使用Python实现无损放大图片功能》本文介绍了如何使用Python的Pillow库进行无损图片放大,区分了JPEG和PNG格式在放大过程中的特点,并给出了示例代码,JPEG格式可能受压缩影响,需先... 目录一、什么是无损放大?二、实现方法步骤1:读取图片步骤2:无损放大图片步骤3:保存图片三、示php

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Java实现TXT文件导入功能的详细步骤

《Java实现TXT文件导入功能的详细步骤》在实际开发中,很多应用场景需要将用户上传的TXT文件进行解析,并将文件中的数据导入到数据库或其他存储系统中,本文将演示如何用Java实现一个基本的TXT文件... 目录前言1. 项目需求分析2. 示例文件格式3. 实现步骤3.1. 准备数据库(假设使用 mysql