Andorid 의 Contact 정보 접근

Programming/Android 2015. 1. 7. 01:00 posted by B&U

 

from http://developer.android.com/reference/android/provider/ContactsContract.Data.html

 

 

A. 관련 Data Types

 

0. 공용

CONTENT_ITEM_TYPE : MIME type used when storing this in data table (즉, 각 data class의 MIME TYPE 문자열을 갖고 있는 변수)

ex> Phone.CONTENT_ITEM_TYPE  : Phone data 의 MIME TYPE

 

1. ContactsContract.Data ()

Data.CONTACT_ID : db 상의 각 item을 구분하는 unique index

Data.DISPLAY_NAME : Contact 정보의 이름

 

2. ContactsContract.CommonDataKinds.Phone ()

Phone.TYPE : Phone Number 의 종류 (ex. TYPE_MOBILE)

Phone.NUMBER : Phone Number

 

3.ContactsContract.CommonDataKinds.Email

Email.DATA

 

B. Android APIs

 

1. ContentResolver

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

Parameters

uri The URI, using the content:// scheme, for the content to retrieve.
projection A list of which columns to return. Passing null will return all columns, which is inefficient.
selection A filter declaring which rows to return, formatted as an SQL WHERE clause (excluding the WHERE itself). Passing null will return all rows for the given URI.
selectionArgs You may include ?s in selection, which will be replaced by the values from selectionArgs, in the order that they appear in the selection. The values will be bound as Strings.
sortOrder How to order the rows, formatted as an SQL ORDER BY clause (excluding the ORDER BY itself). Passing null will use the default sort order, which may be unordered.

 

Contact 정보에서 일부 데이터를 가져오기 위한 example

  Contact 정보에서 Mobile 전화번호를 갖는 연락처 목록을 가져온다. projection argument 에 해당하는 각각의 columns Data 를 가져온다

  만약 null 을 선택하면 모든 columns 를 가져오므로 성능이 떨어지게 된다.

cursor c =  getContentResolver().query
          (Data.CONTENT_URI, // uri :
          new String[] {Data.CONTACT_ID, Data.DISPLAY_NAME, Phone.TYPE, Phone.NUMBER, Email.DATA }, // projection : 가져올 columns, 모두 string
           Phone.TYPE + "=?" + " AND " + Data.MIMETYPE + "='" + Phone.CONTENT_ITEM_TYPE + "'", //  selection : SQL WHERE
           new String[] {String.valueOf(Phone.TYPE_MOBILE)},//null, //new String[] {String.valueOf(0)},  // selectionArgs
           Data.DISPLAY_NAME + " desc"//order
           );

주의 : 위의 API를 사용할 때에는 큰 따움표 안의 공백도 모두 의미가 있다. sql 명령으로 argument로 사용되는 문자열기 때문이다. (예상)

 

C. query의 return value인 Cursor의 사용법

 

 

 

 

 

 

 

 

 CONTACT_ID

 Data.DISPLAY_NAME

Phone.TYPE

Phone.NUMBER

Email.DATA

c.moveToFirst()

0

...

 

 

 

c.moveToNext()

1

...

 

 

 

c.moveToPostion(2)

2

...

 

 

 

moveToLast()

3

...

 

 

 

 

1. 각 row 를 이동 혹은 참조 위한 기타 명령>

moveToPrevious()

getCount()

getPostion()

 

2. 각 Column 을 이동 혹은 참조 위한 기타 명령>

getColumnCount(); : 말그대로 개수

getColumnNames() : 모든 컬럼명을 문자열 배열로 얻음.

getColumnName() : 특정 컬럼명을 문자열 배열로 얻음.

getColumnIndex() : 컬럼명에 해당하는 인덱스 얻음.

getInt() : 해당 열에 해당하는 정수형 값

getString() : 해당 열에 해당하는 문자열값