이 블로그 검색

2011년 11월 21일 월요일

안드로이드 전화번호부 가져오기

누군가 정리를 잘 해놓아서 가져왔음...  감사합니다. ^^

원본:

Android: 내장 주소록 읽기

갤럭시S를 구매한 이후로 자질구레한 안드로이드용 앱을 만들어 사용하고 있다. 회사 직원의 주소록을 관리하는 것을 만들었는데, 안드로이드 주소록이 따로 있어서 검색 기능을 통합하려고 안드로이드의 주소록을 살펴 보았다.

사용법은 3개의 객체로 계층 구조화 되어 있다는 것을 제외하면 다른 ContentProvider를 사용하는 것과 동일 했다.

주소록 입출력

  • Android의 주소록 구조
  • android.provider.ContactsContract.Contacts : 최상위 주소록
  • android.provider.ContactsContract.RawContacts : 주소록의 출처별 주소록
  • android.provider.ContactsContract.Data : 주소록에 포함되어 있는 데이터 (예, 전화번호, 이메일 등)
contacts-2.png
  • 주소록 입출력 권한
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
  • Contacts 조회 (Android 2.2)
StringBuffer buf = null;
Cursor contacts = null;
long contactID = 0l;

buf = new StringBuffer();
// String sortOrder = Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
// Cursor contactCursor = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
contacts = getContentResolver().query(Contacts.CONTENT_URI,
        new String[] {
            Contacts._ID, Contacts.CONTACT_PRESENCE, 
            Contacts.CONTACT_STATUS,
            Contacts.CONTACT_STATUS_ICON, Contacts.CONTACT_STATUS_LABEL, 
            Contacts.CONTACT_STATUS_RES_PACKAGE,
            Contacts.CONTACT_STATUS_TIMESTAMP, Contacts.CUSTOM_RINGTONE, 
            Contacts.DISPLAY_NAME,
            Contacts.HAS_PHONE_NUMBER, Contacts.IN_VISIBLE_GROUP, 
            Contacts.LAST_TIME_CONTACTED,
            Contacts.LOOKUP_KEY, Contacts.PHOTO_ID, 
            Contacts.SEND_TO_VOICEMAIL,
            Contacts.STARRED, Contacts.TIMES_CONTACTED
            },
        null, null, null);

contacts.moveToFirst();
if (!contacts.isAfterLast()) {
    do {
        contactID = contacts.getLong(0);
        buf.append("--- Contacts Lists ---\n");
        for (int idx = 0;idx < contacts.getColumnCount();idx++) {
            if (contacts.getString(idx) != null) {
                buf.append(contacts.getColumnName(idx).toUpperCase() + ": " 
                   + contacts.getString(idx) + "\n");
            }
        }
        buf.append("\n");
    } while (contacts.moveToNext());
}
contacts.close();
return buf.toString();
  • RawContacts 조회 (Android 2.2)
StringBuffer buf = null;
Cursor rawContacts = null;
long rawContactID = 0l;

buf = new StringBuffer();
rawContacts = getContentResolver().query(RawContacts.CONTENT_URI,
        new String[] {
            RawContacts._ID, RawContacts.ACCOUNT_NAME, 
            RawContacts.ACCOUNT_TYPE, 
            RawContacts.AGGREGATION_MODE, RawContacts.CONTACT_ID, 
            RawContacts.CUSTOM_RINGTONE,
            RawContacts.DELETED, RawContacts.DIRTY, 
            RawContacts.LAST_TIME_CONTACTED,
            RawContacts.SEND_TO_VOICEMAIL, RawContacts.SOURCE_ID, 
            RawContacts.STARRED,
            RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3, 
            RawContacts.SYNC4, RawContacts.TIMES_CONTACTED, 
            RawContacts.VERSION
            },
        RawContacts.CONTACT_ID + "=?", 
        new String[] {String.valueOf(contactID)}, null);

rawContacts.moveToFirst();
if (!rawContacts.isAfterLast()) {
    do {
        rawContactID = rawContacts.getLong(0);
        buf.append("--- RawContacts Lists ---\n");
        for (int pos = 0;pos < rawContacts.getColumnCount();pos++) {
            if (rawContacts.getString(pos) != null) {
                buf.append(rawContacts.getColumnName(pos).toUpperCase() 
                   + ": " + rawContacts.getString(pos) + "\n");
            }
        }
        buf.append("\n");
    } while (rawContacts.moveToNext());
}
rawContacts.close();
return buf.toString();
  • Data 조회 (Android 2.2)
StringBuffer buf = null;
Cursor contactData = null;

buf = new StringBuffer();
contactData = getContentResolver().query(Data.CONTENT_URI,
        new String[] {
            Data._ID, Data.MIMETYPE, Data.RAW_CONTACT_ID,
            Data.IS_PRIMARY, Data.IS_SUPER_PRIMARY, Data.DATA_VERSION,
            Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5  
            },
        Data.RAW_CONTACT_ID + "=?", 
        new String[] {String.valueOf(rawContactID)}, null);

buf.append("--- Data Lists ---\n");
contactData.moveToFirst();
if (!contactData.isAfterLast()) {
    do {
        for (int idx = 0;idx < contactData.getColumnCount();idx++) {
            if (contactData.getString(idx) != null) {
                buf.append(contactData.getColumnName(idx).toUpperCase() 
                   + ": " + contactData.getString(idx) + "\n");
            }
        }
        buf.append("\n");
    } while (contactData.moveToNext());
}
contactData.close();
return buf.toString();
  • 전화번호 가져오기
import ContactsContract.CommonDataKinds.Phone;
Cursor PhoneNumberCursor = 
  getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
  • 연락처 등록
ContentValues values = new ContentValues();
values.put(RawContacts.ACCOUNT_TYPE, "basic");
values.put(RawContacts.ACCOUNT_NAME, "test");
Uri rawContactUri = 
    getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId = ContentUris.parseId(rawContactUri);
  • 연락처 수정
int resolver.update(Uri uri, ContentValues values, String where, String selectionArgs[])
  • 연락처 삭제
int resolver.delete(Uri url, String where, String selectionArgs[])
  • 자신의 번호를 조회
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

TelephonyManager mTelephonyMgr = 
     (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String myNumber = mTelephonyMgr.getLine1Number();

댓글 없음:

댓글 쓰기