由于android.provider.Contacts.People已过时,我必须使用android.provider.ContactsContract,但我可以找不到合适的示例(例如:检索电话簿中所有联系人的列表)。
谁知道在哪里可以找到这样的示例?
#1 楼
首先,确保已将<uses-permission android:name="android.permission.READ_CONTACTS"/>
添加到AndroidManifest.xml文件中,然后可以像这样遍历电话联系人:
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
while (cursor.moveToNext()) {
String contactId = cursor.getString(cursor.getColumnIndex(
ContactsContract.Contacts._ID));
String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if (Boolean.parseBoolean(hasPhone)) {
// You know it has a number so now query it like this
Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null);
while (phones.moveToNext()) {
String phoneNumber = phones.getString(phones.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER));
}
phones.close();
}
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null);
while (emails.moveToNext()) {
// This would allow you get several email addresses
String emailAddress = emails.getString(
emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
}
emails.close();
}
cursor.close();
此外,您还可以循环浏览联系人,并简单地获取姓名和电话号码,如下所示:
Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while(people.moveToNext()) {
int nameFieldColumnIndex = people.getColumnIndex(PhoneLookup.DISPLAY_NAME);
String contact = people.getString(nameFieldColumnIndex);
int numberFieldColumnIndex = people.getColumnIndex(PhoneLookup.NUMBER);
String number = people.getString(numberFieldColumnIndex);
}
people.close();
此外,如果需要要从联系人那里获取诸如笔记之类的东西,那么您将需要使用其他URI,如下所示(请随意使用此方法):我不仅使用了联系人ID,还使用了哑剧类型进行查询。
评论
哈维尔(Javier)非常完美,为此,我不得不为自己的目的进行一些调整(检查联系人是否在位以避免再次添加)。这是我的代码,如果您想将其添加到您的帖子中:String [] contactNameColumn = {ContactsContract.Contacts.DISPLAY_NAME};游标checkContactInDatabase = getContentResolver()。query(ContactsContract.Contacts.CONTENT_URI,contactNameColumn,ContactsContract.Contacts.DISPLAY_NAME +“ =” +“'” +名称+“'”,null,null);如果(checkContactInDatabase.moveToFirst()){int nameFieldColumnIndex = checkContactInDatabase.getColumnIndex(PhoneLookup.DISPLAY_NAME);
– Sephy
2010年5月28日在9:40
字符串contact = checkContactInDatabase.getString(nameFieldColumnIndex); Toast.makeText(Contact.this,contact +“” + getString(R.string.alreadySaved),Toast.LENGTH_SHORT).show(); } else {Intent i = new Intent(Intent.ACTION_INSERT_OR_EDIT); i.setType(Contacts.CONTENT_ITEM_TYPE); i.putExtra(Insert.NAME,名称); i.putExtra(电话,手机); i.putExtra(Insert.COMPANY,公司); i.putExtra(Insert.POSTAL,adresse); startActivity(i); } checkContactInDatabase.close();
– Sephy
2010年5月28日在9:40
嗨,如果(Boolean.parseBoolean(hasPhone));我总是在此语句上出错。即使hasPhone的值=“ 1”
–Vamsi
2010年11月29日在7:22
代替emails.getColumnIndex(ContactsContract.CommonDataKinds.CommonDataColumns.DATA));您还可以使用emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)));
–eresterester
2011年5月22日晚上8:38
您将如何获得联系人照片?我已经看过许多关于SO的所谓解决方案,但是它们在很大程度上是不可靠的...
–user868935
2012年6月24日19:01
#2 楼
很高兴看到一些有用的信息,令人沮丧的是文档等对这一重要主题的覆盖程度很差。经过太多的骇客攻击之后,我想我也会分享一些代码。以下代码更漂亮,并且可以更高效地完成同一工作。Uri contactUri = ContactsContract.Contacts.CONTENT_URI;
String[] PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
String SELECTION = ContactsContract.Contacts.HAS_PHONE_NUMBER + "='1'";
Cursor contacts = managedQuery(contactUri, PROJECTION, SELECTION, null, null );
上面的代码块返回一个游标,该游标指向结果查询,该查询仅包含具有电话号码的行。很好,因为您通常有很多没有数字的联系人。此外,PROJECTION限制了返回的数据量。
String key, value, phoneNumber;
Hashtable contactPhoneInfo = new Hashtable<String, String>();
Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String [] PHONES_PROJECTION = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER };
String PHONE_SELECTION = null;
contacts.moveToFirst();
do{
long contactId = contacts.getLong(idColumnIndex);
PHONE_SELECTION = ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId;
Cursor phones = managedQuery(phoneUri,
PHONES_PROJECTION,
null,
null,
ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY + " DESC");
phones.moveToFirst();
key = phones.getString(0).replaceAll("\D", "");
value = contacts.getString(nameColumnIndex);
contactPhoneInfo.put(key, value);
}while(contacts.moveToNext());
contacts.close();
}
上面的块获取与每个具有电话号码的联系人ID关联的电话号码。我将所有信息存储在哈希表中,并带有电话号码的键值。我也剥离了所有无数字信息的电话号码。出于某些原因,即使ContactsContract.CommonDataKinds.Phone.HAS_PHONE_NUMBER有效,如果您在投影参数中包含该参数,它也会打断查询,但我不知道为什么,而且这样做令人沮丧。
上面代码的第二部分太慢,所有查询调用都使所有内容陷入瘫痪。下面的代码要快得多。只需获取电话内容的所有行,然后使用contact_ids即可对所需数据进行排序。
Cursor phones = managedQuery(phoneUri,
PHONES_PROJECTION,
PHONE_SELECTION,
null,
ContactsContract.CommonDataKinds.Phone.IS_SUPER_PRIMARY + " DESC");
contacts.moveToFirst();
do{
value = "";
key = contacts.getString(idColumnIndex);
contactPhoneInfo.put(key, value);
}while(contacts.moveToNext());
phones.moveToFirst();
Set keySet = contactPhoneInfo.keySet();
idColumnIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
int numColumnIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
do{
key = phones.getString(idColumnIndex);
if(keySet.contains(key)){
value = phones.getString(numColumnIndex).replaceAll("\D", "");
contactPhoneInfo.put(key, value);
}
}while(phones.moveToNext());
您最终得到一个包含所有所需信息的哈希表。当然,您可以将所需的任何信息放入数据结构中。第二种方法要快得多。
评论
如果只需要一些相关联系人的信息,也可以在投影中使用隐式联接列(例如ContactsContract.Data.DISPLAY_NAME);那么您就不必在Java中进行混乱的模拟联接。
–约尼·萨姆兰(Yoni Samlan)
2010-12-17 16:28
#3 楼
只需添加即可,当您检索联系人时,您可能会收到很多“垃圾”联系人-例如,用户在某些时候拥有的某些电子邮件地址会向其发送电子邮件,但不会进行汇总...用户可见的联系人,例如在Android自己的联系人应用程序中,您需要将选择限制为仅IN_VISIBLE_GROUP。 String where = ContactsContract.Contacts.IN_VISIBLE_GROUP + "= ? ";
String[] selectionArgs = new String[] { "1" };
#4 楼
我认为在StackOverflow上使该URL中的代码http://coderzheaven.com/2011/06/get-all-details-from-contacts-in-android/上的链接有时会断开很重要。 br /> public void readContacts(){
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0) {
while (cur.moveToNext()) {
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
System.out.println("name : " + name + ", ID : " + id);
// get the phone number
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
String phone = pCur.getString(
pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
System.out.println("phone" + phone);
}
pCur.close();
// get email and type
Cursor emailCur = cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{id}, null);
while (emailCur.moveToNext()) {
// This would allow you get several email addresses
// if the email addresses were stored in an array
String email = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
String emailType = emailCur.getString(
emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
System.out.println("Email " + email + " Email Type : " + emailType);
}
emailCur.close();
// Get note.......
String noteWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] noteWhereParams = new String[]{id,
ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
Cursor noteCur = cr.query(ContactsContract.Data.CONTENT_URI, null, noteWhere, noteWhereParams, null);
if (noteCur.moveToFirst()) {
String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));
System.out.println("Note " + note);
}
noteCur.close();
//Get Postal Address....
String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] addrWhereParams = new String[]{id,
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};
// Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI,
// null, null, null, null);
Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI,
null, addrWhere, addrWhereParams, null);
while(addrCur.moveToNext()) {
String poBox = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
String street = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
String city = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
String state = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
String postalCode = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
String country = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
String type = addrCur.getString(
addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
// Do something with these....
}
addrCur.close();
// Get Instant Messenger.........
String imWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] imWhereParams = new String[]{id,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI,
null, imWhere, imWhereParams, null);
if (imCur.moveToFirst()) {
String imName = imCur.getString(
imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
String imType;
imType = imCur.getString(
imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));
}
imCur.close();
// Get Organizations.........
String orgWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] orgWhereParams = new String[]{id,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
Cursor orgCur = cr.query(ContactsContract.Data.CONTENT_URI,
null, orgWhere, orgWhereParams, null);
if (orgCur.moveToFirst()) {
String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
}
orgCur.close();
}
}
}
}
强调文字
评论
请注意,此代码可能存在性能问题。看到问题:stackoverflow.com/questions/10921109/…
– oshai
2012年6月7日在6:40
非常低效,请不要使用此代码...可能需要一分钟!
– xnagyg
2015年1月5日于20:59
#5 楼
我发现阅读联系人非常简单的解决方案。 (无聊地编写用于读取每个值的代码,因此对联系人使用包装器类是很好的方法)。Contact.java
package com.test;
import java.util.ArrayList;
public class ContactList {
private ArrayList<Contact> contacts = new ArrayList<Contact>();
public ArrayList<Contact> getContacts() {
return contacts;
}
public void setContacts(ArrayList<Contact> contacts) {
this.contacts = contacts;
}
public void addContact(Contact contact) {
this.contacts.add(contact);
}
public ContactList() {
}
}
Address.java
package com.test;
import java.util.ArrayList;
public class Contact {
private String id;
private String displayName;
private ArrayList<Phone> phone;
private ArrayList<Email> email;
private ArrayList<String> notes;
private ArrayList<Address> addresses = new ArrayList<Address>();
private ArrayList<IM> imAddresses;
private Organization organization;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public ArrayList<Phone> getPhone() {
return phone;
}
public void setPhone(ArrayList<Phone> phone) {
this.phone = phone;
}
public void addPhone(Phone phone) {
this.phone.add(phone);
}
public ArrayList<Email> getEmail() {
return email;
}
public void setEmail(ArrayList<Email> email) {
this.email = email;
}
public void addEmail(Email email) {
this.email.add(email);
}
public ArrayList<String> getNotes() {
return notes;
}
public void setNotes(ArrayList<String> notes) {
this.notes = notes;
}
public void AddNotes(String notes){
this.notes.add(notes);
}
public ArrayList<Address> getAddresses() {
return addresses;
}
public void setAddresses(ArrayList<Address> addresses) {
this.addresses = addresses;
}
public void addAddress(Address address) {
this.addresses.add(address);
}
public ArrayList<IM> getImAddresses() {
return imAddresses;
}
public void setImAddresses(ArrayList<IM> imAddresses) {
this.imAddresses = imAddresses;
}
public void addImAddresses(IM imAddr) {
this.imAddresses.add(imAddr);
}
public Organization getOrganization() {
return organization;
}
public void setOrganization(Organization organization) {
this.organization = organization;
}
}
电子邮件。 java
package com.test;
public class Address {
private String poBox;
private String street;
private String city;
private String state;
private String postalCode;
private String country;
private String type;
private String asString = "";
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getPoBox() {
return poBox;
}
public void setPoBox(String poBox) {
this.poBox = poBox;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
public String getPostalCode() {
return postalCode;
}
public void setPostalCode(String postalCode) {
this.postalCode = postalCode;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
public String toString() {
if (this.asString.length() > 0) {
return(this.asString);
} else {
String addr = "";
if (this.getPoBox() != null) {
addr = addr + this.getPoBox() + "n";
}
if (this.getStreet() != null) {
addr = addr + this.getStreet() + "n";
}
if (this.getCity() != null) {
addr = addr + this.getCity() + ", ";
}
if (this.getState() != null) {
addr = addr + this.getState() + " ";
}
if (this.getPostalCode() != null) {
addr = addr + this.getPostalCode() + " ";
}
if (this.getCountry() != null) {
addr = addr + this.getCountry();
}
return(addr);
}
}
public Address(String asString, String type) {
this.asString = asString;
this.type = type;
}
public Address(String poBox, String street, String city, String state,
String postal, String country, String type) {
this.setPoBox(poBox);
this.setStreet(street);
this.setCity(city);
this.setState(state);
this.setPostalCode(postal);
this.setCountry(country);
this.setType(type);
}
}
IM.java
package com.test;
public class Email {
private String address;
private String type;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getType() {
return type;
}
public void setType(String t) {
this.type = t;
}
public Email(String a, String t) {
this.address = a;
this.type = t;
}
}
Organization.java
package com.test;
public class IM {
private String name;
private String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public IM(String name, String type) {
this.name = name;
this.type = type;
}
}
Phone.java
package com.test;
public class Organization {
private String organization = "";
private String title = "";
public String getOrganization() {
return organization;
}
public void setOrganization(String organization) {
this.organization = organization;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Organization() {
}
public Organization(String org, String title) {
this.organization = org;
this.title = title;
}
}
ContactAPI.java
package com.test;
public class Phone {
private String number;
private String type;
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Phone(String n, String t) {
this.number = n;
this.type = t;
}
}
ContactAPISdk5。 java
package com.test;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.os.Build;
public abstract class ContactAPI {
private static ContactAPI api;
public static ContactAPI getAPI() {
if (api == null) {
String apiClass;
if (Integer.parseInt(Build.VERSION.SDK) >= Build.VERSION_CODES.ECLAIR) {
apiClass = "com.*********.ContactAPISdk5";
} else {
apiClass = "com.*********.ContactAPISdk3";
}
try {
Class<? extends ContactAPI> realClass = Class.forName(apiClass).
asSubclass(ContactAPI.class);
api = realClass.newInstance();
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
return api;
}
public abstract Intent getContactIntent();
public abstract ContactList newContactList();
public abstract Cursor getCur();
public abstract void setCur(Cursor cur);
public abstract ContentResolver getCr();
public abstract void setCr(ContentResolver cr);
}
ContactAPISdk3.java
package com.test;
import java.util.ArrayList;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.provider.ContactsContract;
public class ContactAPISdk5 extends ContactAPI {
private Cursor cur;
private ContentResolver cr;
public Cursor getCur() {
return cur;
}
public void setCur(Cursor cur) {
this.cur = cur;
}
public ContentResolver getCr() {
return cr;
}
public void setCr(ContentResolver cr) {
this.cr = cr;
}
public Intent getContactIntent() {
return(new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI));
}
public ContactList newContactList() {
ContactList contacts = new ContactList();
String id;
this.cur = this.cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (this.cur.getCount() > 0) {
while (cur.moveToNext()) {
Contact c = new Contact();
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
c.setId(id);
c.setDisplayName(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
c.setPhone(this.getPhoneNumbers(id));
}
c.setEmail(this.getEmailAddresses(id));
c.setNotes(this.getContactNotes(id));
c.setAddresses(this.getContactAddresses(id));
c.setImAddresses(this.getIM(id));
c.setOrganization(this.getContactOrg(id));
contacts.addContact(c);
}
}
return(contacts);
}
public ArrayList<Phone> getPhoneNumbers(String id) {
ArrayList<Phone> phones = new ArrayList<Phone>();
Cursor pCur = this.cr.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",
new String[]{id}, null);
while (pCur.moveToNext()) {
phones.add(new Phone(
pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
, pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))
));
}
pCur.close();
return(phones);
}
public ArrayList<Email> getEmailAddresses(String id) {
ArrayList<Email> emails = new ArrayList<Email>();
Cursor emailCur = this.cr.query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?",
new String[]{id}, null);
while (emailCur.moveToNext()) {
// This would allow you get several email addresses
Email e = new Email(emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))
,emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE))
);
emails.add(e);
}
emailCur.close();
return(emails);
}
public ArrayList<String> getContactNotes(String id) {
ArrayList<String> notes = new ArrayList<String>();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[]{id,
ContactsContract.CommonDataKinds.Note.CONTENT_ITEM_TYPE};
Cursor noteCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null, where, whereParameters, null);
if (noteCur.moveToFirst()) {
String note = noteCur.getString(noteCur.getColumnIndex(ContactsContract.CommonDataKinds.Note.NOTE));
if (note.length() > 0) {
notes.add(note);
}
}
noteCur.close();
return(notes);
}
public ArrayList<Address> getContactAddresses(String id) {
ArrayList<Address> addrList = new ArrayList<Address>();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[]{id,
ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};
Cursor addrCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null, where, whereParameters, null);
while(addrCur.moveToNext()) {
String poBox = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));
String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
String type = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));
Address a = new Address(poBox, street, city, state, postalCode, country, type);
addrList.add(a);
}
addrCur.close();
return(addrList);
}
public ArrayList<IM> getIM(String id) {
ArrayList<IM> imList = new ArrayList<IM>();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[]{id,
ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};
Cursor imCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null, where, whereParameters, null);
if (imCur.moveToFirst()) {
String imName = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));
String imType;
imType = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));
if (imName.length() > 0) {
IM im = new IM(imName, imType);
imList.add(im);
}
}
imCur.close();
return(imList);
}
public Organization getContactOrg(String id) {
Organization org = new Organization();
String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";
String[] whereParameters = new String[]{id,
ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE};
Cursor orgCur = this.cr.query(ContactsContract.Data.CONTENT_URI, null, where, whereParameters, null);
if (orgCur.moveToFirst()) {
String orgName = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.DATA));
String title = orgCur.getString(orgCur.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE));
if (orgName.length() > 0) {
org.setOrganization(orgName);
org.setTitle(title);
}
}
orgCur.close();
return(org);
}
}
注意:不要忘记更改包名称
<uses-permission android:name="android.permission.READ_CONTACTS"/>
。 源(链接可以随时消失:))
#6 楼
把这个....Cursor phones =
getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
while (phones.moveToNext())
{
String Name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String Number=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
让我知道是否有问题。
#7 楼
这部分对我不起作用: while (phones.moveToNext()) {
String phoneNumber = phones.getString(
phones.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER));
}
如果我使用它,它会起作用:
while (phones.moveToNext()) {
String pdata = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA));
Log.v("DATA",pdata);
}
#8 楼
您可以在android开发人员的网站上使用“ ContactManager”示例。(OR)
转到设置了在系统中下载android-sdk的路径的位置。在android-sdk-mac_x86 / samples / android-10文件夹中,您可以看到“ ContactManager”示例。
我尝试使用此示例,在我的应用程序中效果很好。
评论
我也很想知道这一点。我只能在旧方法上找到示例。