问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

contactscontract所有id都一样吗

发布网友 发布时间:2022-05-26 22:04

我来回答

1个回答

热心网友 时间:2023-11-07 11:27

一、 从Android 2.0 SDK开始有关联系人provider的类变成了ContactsContract,虽然老的android.provider.Contacts能用,但是在SDK中标记为为deprecated将被放弃不推荐的方法,而从Android 2.0及API Level为5开始新增了android.provider.ContactsContract来代替原来的方法。
ContactsContract的子类ContactsContract.Contacts是一张表,代表了所有联系人的统计信息。比如联系人ID(—ID),查询键(LOOKUP_KEY),联系人的姓名(DISPLAY_NAME_PRIMARY),头像的id(PHOTO_ID)以及群组的id等等。

我们可以通过以下的方法取得所有联系人的表的Cursor对象:
1)ContentResolver contentResolver=getContentResolver();//获取 ContentResolver对象查询在ContentProvider里定义的共享对象;

2)Cursor cursor=contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//根据URI对象ContactsContract.Contacts.CONTENT_URI查询所有联系人;

从Cursor对象里我们关键是要取得联系人的_id。通过它,再通过ContactsContract.CommonDataKinds的各个子类查询该_id联系人的电话(ContactsContract.CommonDataKinds.Phone),email(ContactsContract.CommonDataKinds.Email)等等。
以取得该联系人所有电话为例:
1)int idFieldIndex=cursor.getColumnIndex(ContactsContract.Contacts._ID);
int id=cursor.getInt(idFieldIndex);//根据列名取得该联系人的id;
2)Cursor phonecursor=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?", new String[]{Integer.toString(id)}, null);
//再类ContactsContract.CommonDataKinds.Phone中根据查询相应id联系人的所有电话;
类似地可以ContactsContract.CommonDataKinds的不同的子类查询不同的内容。android文档告诉我们推荐使用ContactsContract.Contacts.LOOKUP_KEY代替ContactsContract.Contacts._ID。

最后,由于读取联系人比较的占用资源,为了提高用户的体验度。考虑将读取的过程放在线程里完成,推荐使用AsyncTask类。
二、
在2.1中,display_name 在contact表中,而data表中包含很多contact的数据,比如电话,姓名,email等 ,如果要查询一个联系人的姓名和电话,网上大多数的做法是:
先查contact表,得到姓名,再根据has_phone_number是否是1决定data表中有无电话记录。这样是要查发2个uri,得到两个cursor在分别去除需要的内容。
其实可以直接发一个uri就查处姓名和号码,代码:
Cursor c=getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, "mimetype='vnd.android.cursor.item/phone_v2'", null, null);
这个uri对象data,他会去查view_data这个试图,试图定义就是data,raw_contacts,mimetypes,group等一系列表的联合查询,而上面这个uri发出去会得到很多字段,当条件为mimetype=vnd.android.cursor.item/phone_v2则查的是此人电话所对应的那条记录,其中也会得到姓名,
注意:
姓名是根据display_name 取得
电话是根据data1取得

Example1:
Java代码
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

Uri contactsUri=ContactsContract.Contacts.CONTENT_URI;
String[] proj1=new String[]{ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
ContactsContract.Contacts.LOOKUP_KEY};
Cursor curContacts=getContentResolver().query(contactsUri,proj1, null, null, null);

ArrayList<String> contactsList=new ArrayList<String>();
String allPhoneNo="";
if(curContacts.getCount()>0){
while(curContacts.moveToNext()){
// get all the phone numbers if exist
if(curContacts.getInt(1)>0){
allPhoneNo=getAllPhoneNumbers(curContacts.getString(2));
}
contactsList.add(curContacts.getString(0)+" , "+allPhoneNo);
allPhoneNo="";
}
}

// binding the data to ListView
setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, contactsList));
ListView lv=getListView();
lv.setTextFilterEnabled(true);

}

/**
* Get all the phone numbers of a specific contact person
*/
public String getAllPhoneNumbers(String lookUp_Key){
String allPhoneNo="";

// Phone info are stored in the ContactsContract.Data table
Uri phoneUri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String[] proj2={ContactsContract.CommonDataKinds.Phone.NUMBER};
// using lookUp key to search the phone numbers
String selection=ContactsContract.Data.LOOKUP_KEY+"=?";

Cursor cur=getContentResolver().query(phoneUri,proj2,selection, new String[]{lookUp_Key}, null);
while(cur.moveToNext()){
allPhoneNo+=cur.getString(0)+" ";
}

return allPhoneNo;
}
来源:http://www.cnblogs.com/ruiyi1987/archive/2011/06/20/2084925.html

Example2:
Java代码
private List<HashMap<String, String>> fillMaps() {
List<HashMap<String, String>> items = new ArrayList<HashMap<String, String>>();

Cursor cur = null;
try {
// Query using ContentResolver.query or Activity.managedQuery
cur = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
if (cur.moveToFirst()) {
int idColumn = cur.getColumnIndex(ContactsContract.Contacts._ID);
int displayNameColumn = cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
// Iterate all users
do {
String phoneNumber = "";
String contactId = cur.getString(idColumn);
String displayName = cur.getString(displayNameColumn);
// Get number of user's phoneNumbers
int numberCount = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (numberCount > 0) {
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId
/*
* + " and " + ContactsContract.CommonDataKinds
* .Phone.TYPE + "=" + ContactsContract.CommonDataKinds
* .Phone.TYPE_MOBILE
*/, null, null);
if (phones.moveToFirst()) {
int numberColumn = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
do {
phoneNumber += phones.getString(numberColumn) + ",";
} while (phones.moveToNext());
}
}
// Add values to items
HashMap<String, String> i = new HashMap<String, String>();
i.put("name", displayName);
i.put("key", phoneNumber);
items.add(i);
} while (cur.moveToNext());
} else {
HashMap<String, String> i = new HashMap<String, String>();
i.put("name", "Your Phone");
i.put("key", "Have No Contacts.");
items.add(i);
}
} finally {
if (cur != null)
cur.close();
}
return items;
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...暑假用学生证买火车票可以买几次?因为这个暑假我已经用过一次了 还... ...暑假没用过。寒假能用4次不?因为我要来回2趟。 2017成都拆扦赔多少钱 儿童牙齿矫正齿的价格是多少 儿童矫正牙齿要多少钱 ...3表皮手感温润如旱玛瑙有指甲纹,尺寸40公分,2--5表皮红丝有指甲... 有哪些判断芥花籽油品质的技巧分享? 便秘能吃爱生生命的益生菌吗?会不会有副作用 如何找到小米手机回收站里面的照片? 梦到和死去的晚辈旅游 photo shop怎么调出这个颜色? 调色!! 月薪5000个人所得税是多少? 这句SQL语句是什么意思 澳大利亚JP签字的护照复印件能否当作photo ID在大学报名日使用? 福州工资超过多少才需要缴个人所得税? 粉色阔腿裤配什么上衣好看 关于在澳洲RTA办理PHOTO ID 的问题 我在加拿大入籍了 现在刚刚拿到入籍证书 在申请护照的时候却出问题了 申请护照需要有photo id 关于澳洲RTA的PHOTO ID的问题 无线控制器最大管理AP数 72/600 什么意思? 什么叫相册ID 求助!急!state-issued photo ID是什么? 现在是留学生的身份在多伦多,前几天才到的,紧急求助!!一来就立刻去照Photo ID,累得要死。 photo ID指的是什么 音乐核心素养的内涵 试析音乐核心素养的特征与培养 如何在小学音乐常态课堂培养音乐核心素养 如何培养小学生的核心素养 论文 想养鹅,沙湖镇有养殖场出租吗? 为什么1岁的孩子夜里总流鼻血 怎么测电容啊 IDC的100M共享端口是什么概念?一个机柜一个还是几个机柜共用一个? 小时候看到别人相亲一相亲就能成功一相亲就能成功,还以为很容易。大了之后才明白,并不一定的。不对吗? 相亲怎样算是确立关系确定恋爱关系的4种标准 快三十了,为什么年龄越大我就越会觉得相亲成的可能性就越小,失败的次数多了,如果哪次突然双方都? 如何才能相亲成功?相亲的必备技巧有什么呢? 为什么有些人那么容易就相亲成功呢? 85%的人认为相亲成功的技巧有哪些?可以详细说说吗? 相亲不成还能做朋友吗? 相亲不成功能做朋友吗 现在的相亲演变成了“相钱”你怎么看? 虽然没钱是万万不能的。但是相钱还会有真的感情吗?你怎么看? 相亲之前有心慌的感觉,能成吗 我买的二手手机,不知道账号密码怎么办? 便利店使用客流统计系统有哪些好处 云服务是vivox5l自带软件吗 我买的手机是二手手机,我不知道他这个账号的密码是什么,也没法改。请大家想想办法。 pacs系统能打开vna格式图像吗? 门店采用客流统计有什么意义? 广州PACS系统有谁做? 买了一个2手手机但他的账号没有退也不知道他的密码,我账号申诉成功了但还是不知道怎么退出他的账号?