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

相关文章

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测

[MySQL表的增删改查-进阶]

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 💻💻💻数据库约束 🔭🔭🔭约束类型 not null: 指示某列不能存储 NULL 值unique: 保证某列的每行必须有唯一的值default: 规定没有给列赋值时的默认值.primary key:

【北交大信息所AI-Max2】使用方法

BJTU信息所集群AI_MAX2使用方法 使用的前提是预约到相应的算力卡,拥有登录权限的账号密码,一般为导师组共用一个。 有浏览器、ssh工具就可以。 1.新建集群Terminal 浏览器登陆10.126.62.75 (如果是1集群把75改成66) 交互式开发 执行器选Terminal 密码随便设一个(需记住) 工作空间:私有数据、全部文件 加速器选GeForce_RTX_2080_Ti

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

JavaFX应用更新检测功能(在线自动更新方案)

JavaFX开发的桌面应用属于C端,一般来说需要版本检测和自动更新功能,这里记录一下一种版本检测和自动更新的方法。 1. 整体方案 JavaFX.应用版本检测、自动更新主要涉及一下步骤: 读取本地应用版本拉取远程版本并比较两个版本如果需要升级,那么拉取更新历史弹出升级控制窗口用户选择升级时,拉取升级包解压,重启应用用户选择忽略时,本地版本标志为忽略版本用户选择取消时,隐藏升级控制窗口 2.

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR