读取手机联系人

刚刚学习Android,接触到了如何读取手机联系人的小功能,记录下,也欢迎大家进来参考!

总体思想:

1,从raw_contacts中读取联系人的id("contact_id")。

2,根据contact_id从data表中查询出相应的电话号码和联系人的名称。

3,根据mimetype表来区分哪个是联系人名称,哪个是电话号码,(mimetype_id 中5:phone,7:name)如图所示:


代码如下:

1,拿到contactId:

Uri rawContactsUri = Uri.parse("content://com.android.contacts/raw_contacts");

Cursor rawContactsCursor = getContentResolver().query(rawContactsUri, new String[]{"contact_id"}, null, null, null);
/*括号里的第一个函数表示的是:传的哪个表
*第二个函数是:查哪些字段
*第三个函数是:筛选条件
*第四个函数是:筛选条件的参数
*第五个函数还:排序,这里我们用他的默认排序就可以了
*/
//拿到Cursor后,我们进行遍历
if (rawContactsCursor != null) {
while (rawContactsCursor.moveToNext()) {
//while中的条件表示的是,我们一直可以往下拿的话
//读数据,0表示的是,我们就读第一列
String contactId = rawContactsCursor.getString(0);
//System.out.println("id::"+contactId);
}

//在读取过ID后,关闭Cursor
rawContactsCursor.close();

}

在我打印的时候,出现了问题,问题是我没有在AndroidManifest 中加权限,加下权限:READ_CONTACTS

2,对data表的查询,其实是查询的data表的视图view_data

Uri dataUri = Uri.parse("content://com.android.contacts/data");

Cursor dataCursor = getContentResolver().query(dataUri,new String[]{"data1","mimetype"}, "contact_id=?", 

new String[]{contactId}, null);
if (dataCursor != null) {
while (dataCursor.moveToNext()) {
String data1 = dataCursor.getString(0);
String mimetype = dataCursor.getString(1);
//System.out.println(contactId+";"+data1+";"+mimetype);

//然后,根据mimetype来区分哪个是联系人,哪个是电话号码
if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
map.put("phone", data1);
}else if ("vnd.android.cursor.item/name".equals(mimetype)) {
map.put("name", data1);
}
}
dataCursor.close();

}

3保存

用hashmap来对拿到是数据保存,Arraylist来保存多条联系人


4用listView 视图来展示!






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值