文档章节

读取通讯录联系人

mutouzhang
 mutouzhang
发布于 2014/05/05 14:50
字数 679
阅读 418
收藏 3
点赞 0
评论 0


先添加权限


根据号码查询联系人姓名

查询data表,根据data1字段(因为联系人姓名已知 where data1 = phoneNumber),返回mimetype和_id字段 

如果返回的cursor不为空 且cursor.getCount长度大于0,则遍历mimetype(0下标元素)和raw_contact_id(1下标元素).

在遍历时,如果mimetype与vnd.android.cursor.item/phone_v2相同(即数据类型是号码)<---------查询的是data表 但实际上查询的是view视图 所以mimetype返回的string 可以打印下看看--------------,则根据已获取的raw_contact_id查询姓名字段

如果返回的cursor不为空且长度大于0,则遍历name(0下标元素)

切记关闭这2个cursor

//根据号码查询联系人姓名
	public void queryContact(String number){
	//联系人涉及到两个表
	Uri uri1 = Uri.parse("content://com.android.contacts/data");
	Uri uri2 = Uri.parse("content://com.android.contacts/raw_contacts");
	ContentResolver resolver = getContentResolver();
//	Cursor cursor = resolver.query(uri1 , new String[]{"mimetype","_id"}, "data1=?", new String[]{number}, null);//这一行有问题 按理不应该查询_id
	Cursor cursor = resolver.query(uri1 , new String[]{"mimetype","raw_contact_id"}, "data1=?", new String[]{number}, null);
	if(cursor != null && cursor.getCount() > 0){
		while(cursor.moveToNext()){
			String type = cursor.getString(0);
			int raw_contact_id = cursor.getInt(1);
			System.out.println(raw_contact_id);
			System.out.println(type);
			if("vnd.android.cursor.item/phone_v2".equals(type)){
				Cursor cursor2 = resolver.query(uri2, new String[]{"display_name"}, "contact_id = ?", new String[]{String.valueOf(raw_contact_id)}, null);
				if(cursor2 != null && cursor2.getCount() > 0){
					while(cursor2.moveToNext()){
						String name = cursor2.getString(0);
						System.out.println(name);
					}
					cursor2.close();
				}
			}
		}
		cursor.close();
	}
}




//根据姓名查询联系人号码 未判断如果是多号码的话出现的是哪一个 经测试 显示的是第2个号码 或者多号码的最后一个 

查询raw_contacts表,根据display_name字段,返回contact_id字段

如果返回的cursor不为空,且长度大于0,则遍历contact_id(0下标元素)

在遍历时,根据取得的contact_id和mimetype(已经知道需要找号码,即mimetype表中vnd.android.cursor.item/phone_v2,其_id为5)来查询data1字段

如果返回的cursor不为空且长度大于0,则遍历data1(0下标元素)

切记关闭这2个cursor

//根据联系人姓名查号码 如果在数据库中不存在 那么返回的是空字符串
	public void queryContactByName(String name){
		//联系人涉及到两个表
		Uri uri1 = Uri.parse("content://com.android.contacts/data");//data表的uri
		Uri uri2 = Uri.parse("content://com.android.contacts/raw_contacts");//raw_contacts表的uri
		ContentResolver resolver = getContentResolver();
		Cursor cursor = resolver.query(uri2 , new String[]{"contact_id"}, "display_name=?", new String[]{name}, null);
		if(cursor != null && cursor.getCount() > 0){
			while(cursor.moveToNext()){
				String contact_id = cursor.getString(0);
				System.out.println("查询到的contact_id="+contact_id);
				Cursor cursor2 = resolver.query(uri1, new String[]{"data1"}, "contact_id = ?" +  "and mimetype = ?", new String[]{String.valueOf(contact_id),"vnd.android.cursor.item/phone_v2"}, null);
					if(cursor2 != null && cursor2.getCount() > 0){
						while(cursor2.moveToNext()){
							String number = cursor2.getString(0);
							System.out.println(number);
						}
						cursor2.close();
					}
			}
			cursor.close();
		}
	}



这个类对根据姓名获取的电话号码进行了去除空格和“-”处理 因为在数据库里面的号码是以1 234-444-444的格式进行储存的

public class RemovePhoneNumberSpace {

	public static String getNormativePhoneNumber(String unNormativePhoneNumber) {
		
		String removeCharPhoneNumber = "";
		
		if ( !"".equals(unNormativePhoneNumber)) {
			String removeSpacePhoneNumber = unNormativePhoneNumber.replaceAll(" ", "");
			removeCharPhoneNumber = removeSpacePhoneNumber.replaceAll("-", "");
			
		}
		
		return removeCharPhoneNumber;
		
	}
	
}

























© 著作权归作者所有

共有 人打赏支持
mutouzhang
粉丝 6
博文 189
码字总数 91235
作品 0
洛阳
程序员
ios(包括6、7)应用程序引用系统通讯录的方法 [亲测可行]

由于ios系统对用户隐私的控制,第三方应用程序只能通过苹果官方接口调用系统通讯录,不能像android那样直接操作通讯录数据库。 一般地,使用系统自带通讯录的方法有两种,一种是直接将整个通...

Align ⋅ 2016/01/08 ⋅ 0

Android 的 Intents 和 Intent Filters(实例部分)

引言 上篇我们介绍了Intents和Intent Filters的理论部分,主要是介绍了:activities、services、broadcastreceivers三种组件的Intent机制两种Intent(显式和隐式)及它们如何去匹配目的组件、...

鉴客 ⋅ 2011/09/28 ⋅ 0

iOS获取通讯录联系人信息

iOS获取系统通讯录联系人信息 一、权限注册 随着apple对用户隐私的越来越重视,IOS系统的权限设置也更加严格,在获取系统通讯录之前,我们必须获得用户的授权。权限申请代码示例如下: 几点注...

珲少 ⋅ 2015/04/28 ⋅ 1

Message Template

一个简单的短信模版应用。即为某个联系人制定好短信模版,加上联系人的手机好吗,之后直接点击这个联系人,就会跳转到设备发短信的界面,并且自动填充之前已经定制好的短息内容。Demo还可以读...

匿名 ⋅ 2012/10/27 ⋅ 0

一个App完成入门篇(六)- 完成通讯录页面

第五章和第六章间隔时间有点长,对不起大家了。下面继续。 本节教程将要教会大家如何加载本地通讯录。 导入项目 导入通讯录 自定义js模块 发送和订阅page消息 将要学习的demo效果图如下所示 ...

jonh_felix ⋅ 2016/04/22 ⋅ 0

IOS获取系统通讯录联系人信息

IOS获取系统通讯录联系人信息 一、权限注册 随着apple对用户隐私的越来越重视,IOS系统的权限设置也更加严格,在获取系统通讯录之前,我们必须获得用户的授权。权限申请代码示例如下: ? 1 ...

北方人在上海 ⋅ 2015/09/15 ⋅ 0

Windows Phone 7 获取用户通讯录和日程安排信息

在Windows Phone 7.0版本的API里面对用户手机上的信息基本上是不提供给开发者使用,不过还好在芒果更新里面,我们已经看到了微软正在渐渐地开放这些接口,在7.1版本的API里面多了命名空间Mic...

junwong ⋅ 2012/02/28 ⋅ 0

如果有很多条联系人 怎么才能快速的显示出来呢?

@芳仔小脚丫 你好,想跟你请教个问题:我看了您写的关于读取通讯录的文章 写的很详细 很不错 我现在做的软件也是对联系人这块的操作比较多 所以想问下 如果有很多很多联系人的话 应该怎么做处...

i_蕊 ⋅ 2016/07/15 ⋅ 2

ios address book 操作大全

为了调用系统的通讯录界面与相应功能,需要引入AddressBook.framework 同时,在源文件中需要包含同文件: #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 读取......

Daniel_s ⋅ 2015/11/30 ⋅ 0

联系人管理工具--PopulateKit

Populate 是个 iOS 应用也是个 iOS 库,用户很容易就可以管理通讯录和创建联系人。 用户可以设置和添加联系人到通讯录中 允许用户以任何目的在通讯录中创建联系人

叶秀兰 ⋅ 2014/02/11 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部