Android.provider.ContactsContract
The contract between the contacts provider and applications. Contains definitions for the supported URIs and columns. These APIs supersede ContactsContract.Contacts.
Example
주소록 정보를 획득할 수 있는 샘플클래스.
ContactInfo.java
:
package ---;
import java.io.InputStream;
import android.content.ContentUris;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract.Contacts;
/**
* 주소록에 존재하는 단일 사용자에 대한 정보.
*
* @author cwlee
* @since 2013-08-23
*/
public class ContactInfo {
public long id = 0;
public String name;
public String email;
public String phone;
/** 대표사진을 획득한다. */
public Bitmap getPicture(Context c) {
if (id != 0 && c != null) {
Uri photouri = ContentUris.withAppendedId(Contacts.CONTENT_URI, id);
InputStream input = Contacts.openContactPhotoInputStream(c.getContentResolver(), photouri);
if (input != null) {
return BitmapFactory.decodeStream(input);
}
}
return null;
}
}
ContactManager.java
:
package ---;
import java.util.ArrayList;
import java.util.HashMap;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
/**
* 주소록 관리자.<br>
*
* <h1>Remarks</h1><br>
* 사용을 위해 android.permission.READ_CONTACTS 권한이 필요하다.
*
* @author cwlee
* @since 2013-08-23
*/
public class ContactManager {
/** Projection. */
private static final String[] kProjectionArray = new String[] {
/* ID. */
ContactsContract.Data.CONTACT_ID,
/* 출력이름. */
ContactsContract.Data.DISPLAY_NAME,
/* 사진. */
ContactsContract.Data.PHOTO_ID,
/* MIME-TYPE. */
ContactsContract.Data.MIMETYPE,
/* TYPE. */
ContactsContract.Data.DATA2,
/* phone.number, organization.company. */
ContactsContract.Data.DATA1, };
/** 선택조건. */
private static final String kSelection = String.format("%s='%s' or %s='%s'",
/* PHONE Number. */
ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
/* E-MAIL. */
ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
/** 정렬조건. */
private static final String kSortOrder = ContactsContract.Data.DISPLAY_NAME + "," + ContactsContract.Data._ID
+ " COLLATE LOCALIZED ASC";
/** 생성자를 지원하지 않는다. */
protected ContactManager() {
throw new UnsupportedOperationException();
}
/** 전체 주소록(연락처)정보를 획득한다. */
public static ArrayList<ContactInfo> getContactList(Context c) {
ContentResolver cr = c.getContentResolver();
Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI, kProjectionArray, kSelection, null, kSortOrder);
cursor.moveToFirst();
// ID중복방지를 위한 MAP컨테이너 사용.
HashMap<Long, ContactInfo> contacts = new HashMap<Long, ContactInfo>();
if (cursor.isAfterLast() == false) {
final int kIdColumn = cursor.getColumnIndex(ContactsContract.Data.CONTACT_ID);
final int kNameColumn = cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME);
final int kMimeColumn = cursor.getColumnIndex(ContactsContract.Data.MIMETYPE);
final int kData2Column = cursor.getColumnIndex(ContactsContract.Data.DATA2);
final int kData1Column = cursor.getColumnIndex(ContactsContract.Data.DATA1);
long id = 0;
String mime = null;
String type = null;
String value = null;
ContactInfo contact = null;
// 1회의 루프로 1명의 주소록 정보를 전부 획득할 수 없다.
// 따라서 중복키를 체크하는 로직이 꼭 필요하다. 그래서 HashMap을 사용한다.
do {
mime = null;
type = null;
value = null;
contact = null;
id = cursor.getLong(kIdColumn);
// 중복키 방지를 위한 컨테이너 확인.
if (contacts.containsKey(id) == true) {
contact = (ContactInfo) contacts.get(id);
} else {
contact = new ContactInfo();
}
if (contact.id == 0) {
contact.id = id;
}
if (contact.name == null) {
contact.name = cursor.getString(kNameColumn);
}
mime = cursor.getString(kMimeColumn);
if (contact.phone == null) {
if (mime.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE) == true) {
type = cursor.getString(kData2Column);
value = cursor.getString(kData1Column);
if (type != null && Integer.parseInt(type) == Phone.TYPE_MOBILE) {
contact.phone = value;
}
}
}
if (contact.email == null) {
if (mime.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE) == true) {
value = cursor.getString(kData1Column);
if (value != null) {
contact.email = value;
}
}
}
contacts.put(id, contact);
} while (cursor.moveToNext() == true);
}
cursor.close();
return new ArrayList<ContactInfo>(contacts.values());
}
}