博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读取通讯录联系人
阅读量:7048 次
发布时间:2019-06-28

本文共 3322 字,大约阅读时间需要 11 分钟。

hot3.png

先添加权限

根据号码查询联系人姓名

查询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;			}	}

转载于:https://my.oschina.net/mutouzhang/blog/260784

你可能感兴趣的文章
c# 屏蔽快捷键
查看>>
Java 关于集合框架那点事儿
查看>>
leetcode230
查看>>
leetcode654
查看>>
利用WinRar命令行定时备份Sql2005数据库!
查看>>
C#对象深表复制方法
查看>>
ZT使用freopen函数,减少调试时反复输入数据
查看>>
010——VUE中使用lodash库减少watch对后台请求的压力
查看>>
Yii框架上传后展示图片
查看>>
EXCEL教程,包你一学就会
查看>>
二叉堆 - 最小堆
查看>>
网站开发流程
查看>>
Mac下MongoDB enterprise版的安装
查看>>
8-31测试总结
查看>>
Linux 定时任务
查看>>
Azure IoT 技术研究系列1
查看>>
6.最接近的三数之和
查看>>
C#基础篇九OOP属性结构枚举
查看>>
appium脚本报错selenium.common.exceptions.WebDriverException
查看>>
java udp与tcp
查看>>