1. add user perimission
<uses-permission android:name="android.permission.READ_CONTACTS"/>
2. This is the data entity
import java.util.List;
public class Contact {
// Phone number
private List<String> mPhoneNumbers;
public void setPhoneNumbers(List<String> phontNumberList) {
this.mPhoneNumbers = phontNumberList;
}
public List<String> getPhoneNumbers() {
return mPhoneNumbers;
}
// Display Name
public void setDisplayName(String displayName) {
this.mDisplayName = displayName;
}
public String getDisplayName() {
return mDisplayName;
}
private String mDisplayName;
//Contact ID
private long mContactID;
public void setContactID(long contactID) {
mContactID = contactID;
}
public long getContactID() {
return mContactID;
}
// Photo ID
private long mPhotoID;
public void setPhotoID(long photoID) {
mPhotoID = photoID;
}
public long getPhotoID() {
return mPhotoID;
}
}
3. Create Contacts Manager
import java.util.ArrayList;
import java.util.List;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
public class ContactsManager {
private static ContactsManager instance = null;
private List<Contact> mContactList;
private ContactsManager(Context context) {
mContactList = GetAllContacts(context);
}
public static ContactsManager getInstance(Context context) {
if(instance == null) {
instance = new ContactsManager(context);
}
return instance;
}
private List<Contact> GetAllContacts(Context context)
{
List<Contact> contactList = new ArrayList<Contact>();
ContentResolver resolver = context.getContentResolver();
// 获取手机联系人
Cursor phoneCursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
if (phoneCursor != null) {
while (phoneCursor.moveToNext()) {
Contact c = new Contact();
// set display name
String displayName = phoneCursor.getString(
phoneCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
c.setDisplayName(displayName);
// set contactID
String contactId = phoneCursor.getString(
phoneCursor.getColumnIndex(ContactsContract.Contacts._ID));
c.setContactID(Long.parseLong(contactId));
// has phoneNumberFlag
String hasPhone = phoneCursor.getString(
phoneCursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
// 如果有电话号码
if (hasPhone.compareTo("1") == 0)
{
Cursor phones = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null
,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
List<String> phoneNumbers = new ArrayList<String>();
while (phones.moveToNext())
{
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
phoneNumbers.add(phoneNumber);
}
c.setPhoneNumbers(phoneNumbers);
}
// set Photo ID
String photoID = phoneCursor.getString(
phoneCursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
if(photoID != null)
c.setPhotoID(Long.parseLong(photoID));
else
c.setPhotoID(0); // add to list
contactList.add(c);
}
}
return contactList;
}
public List<Contact> getContactList()
{
return mContactList;
}
public String getContactName(long contactID)
{
String name="";
if(mContactList != null)
{
for(int i=0; i<mContactList.size();i++)
{
Contact contact = mContactList.get(i);
if(contact.getContactID() == contactID)
{
name = contact.getDisplayName();
break;
}
}
}
return name;
}
}
4. Usage
ContactsManager contactsManager = ContactsManager.getInstance(SMSService.this);