Android - 연락처 가져오기 안드로이드

몇 일전에 연락처 가져오기 기능이 필요하여 만든 샘플 코드.

실로 간단하다.

- 메인 Activity                      - 연락처 Activity
  1. 연락처 버튼 클릭 --------> 2. 연락처와 리스트에 뿌리기
  4. 연락처 정보 받음 <-------- 3. 연락처 선택. 

기능 구현을 위한 주요 요소를 살펴보면 
  1. AndroidManifest.xml: 당연히 연락처를 읽어 드리기 권한이 필요하다.(읽는 것만 가능, 쓰기 위해서는 따로 쓰기 권한이 필요)
      - <uses-permission android:name="android.permission.READ_CONTACTS" />

  2. 연락처 쿼리 후 가져오기 

private ArrayList<Contact> getContactList() {

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;

String[] projection = new String[] {
ContactsContract.CommonDataKinds.Phone.CONTACT_ID, // 연락처 ID -> 사진 정보 가져오는데 사용
ContactsContract.CommonDataKinds.Phone.NUMBER,        // 연락처
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME }; // 연락처 이름.

String[] selectionArgs = null;

String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
+ " COLLATE LOCALIZED ASC";

Cursor contactCursor = managedQuery(uri, projection, null,
selectionArgs, sortOrder);

ArrayList<Contact> contactlist = new ArrayList<Contact>();

if (contactCursor.moveToFirst()) {
do {
String phonenumber = contactCursor.getString(1).replaceAll("-",
"");
if (phonenumber.length() == 10) {
phonenumber = phonenumber.substring(0, 3) + "-"
+ phonenumber.substring(3, 6) + "-"
+ phonenumber.substring(6);
} else if (phonenumber.length() > 8) {
phonenumber = phonenumber.substring(0, 3) + "-"
+ phonenumber.substring(3, 7) + "-"
+ phonenumber.substring(7);
}

Contact acontact = new Contact();
acontact.setPhotoid(contactCursor.getLong(0));
acontact.setPhonenum(phonenumber);
acontact.setName(contactCursor.getString(2));

contactlist.add(acontact);
} while (contactCursor.moveToNext());
}

return contactlist;

}

전체 샘플 소스 -> ContactsSample.zip

문득 생각난 건데, 연락처와 통화 기록을 매칭 하여 재미있는 어플 하나 만들 수 있을 것 같기도 하다. 



덧글

  • 전국제패 2012/09/25 16:16 # 삭제 답글

    많은 도움이 되었습니다. 정말 감사합니다~~
  • 수르카 2012/09/27 17:02 #

    도움이 되었다니 다행입니다. ^^
  • 돌비 2014/06/11 18:49 # 삭제 답글

    좋은 자료 잘 보았습니다.
    감사합니다.
  • 헝그리소프트 2014/11/10 03:37 # 삭제 답글

    좋은 소스 감사합니다. 잘 사용할께요. ^^
  • 꼴떡 2014/12/19 04:42 # 삭제 답글

    감사합니다^^
  • 꼴떡 2014/12/19 04:42 # 삭제 답글

    감사합니다^^
  • 기링 2015/01/21 14:03 # 삭제 답글

    왜 저는 안될까용? ㅠㅠ
  • 수르카 2015/01/26 12:46 #

    구체적으로 어떻게 안되는지 알려주시면 확인해보도록 하겠습니다.
  • aaa 2015/02/23 11:23 # 삭제

    manifest에서 activity:name 고치셨나요??? 거기가 잘못돼서 activity를 찾을 수 없다고하네요
  • aaa 2015/02/23 11:24 # 삭제

    manifest에서 activity:name 고치셨나요??? 거기가 잘못돼서 activity를 찾을 수 없다고하네요
  • aaa 2015/02/23 11:24 # 삭제

    manifest에서 activity:name 고치셨나요??? 거기가 잘못돼서 activity를 찾을 수 없다고하네요
  • aaa 2015/02/23 11:24 # 삭제

    manifest에서 activity:name 고치셨나요??? 거기가 잘못돼서 activity를 찾을 수 없다고하네요
  • 워터비 2015/05/01 17:49 # 삭제 답글

    감사합니다. 처음에 좀 해맸는데 차근차근 하다보니 되는군요 ㅎㅎ
    저는 안드로이드 스튜디오에서 구동 확인 했습니다!!
  • 워터비 2015/05/01 17:49 # 삭제 답글

    감사합니다. 처음에 좀 해맸는데 차근차근 하다보니 되는군요 ㅎㅎ
    저는 안드로이드 스튜디오에서 구동 확인 했습니다!!
  • 워터비 2015/05/01 17:49 # 삭제 답글

    감사합니다. 처음에 좀 해맸는데 차근차근 하다보니 되는군요 ㅎㅎ
    저는 안드로이드 스튜디오에서 구동 확인 했습니다!!
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • ㄷㄹ 2015/11/15 17:37 # 삭제 답글

    차라리 에러가나오면 해결을하겠는데... 연락처버튼을 누르면 앱이 중지되어버리네요 ;ㅠ
  • 해결사 2016/12/12 15:18 # 삭제 답글

    연락처 누르면 에러나오시는 분들
    Manifest에서
    <activity
    android:name="wiz.bellpang.com.activitys.ContactListActivity"
    android:screenOrientation="portrait" >
    </activity>



    <activity
    android:name=".ContactListActivity"
    android:screenOrientation="portrait" >
    </activity>

    로 바꿔주세요
  • 김병희 2017/03/20 19:50 # 삭제 답글

    빠른 속도.
    onResume 에서 매번 어댑터 갱신해주는 세심한 코딩.
    프로의 향을 맡고 갑니다.
    잘 사용하겠습니다.
    감사합니다.
  • 김병희 2017/03/20 22:03 # 삭제 답글

    혹시, CONTACTS 변경(Contacts.CONTACT_LAST_UPDATED_TIMESTAMP 칼럼) 확인하여 변경이 있으면 어느 RawContacts의 어느 Data가 수정/삭제/추가된 것인지 CONTACTS 전체를 쿼리하지 않고도 빠르게 알아낼 수 있는 방법이 있을까요?
    대량의 CONTACTS 아니고는 요긴하지 않을 듯하기도 하고, ...
    만약 방법이 있다면 힌트라도 부탁 드립니다.
    감사합니다.
  • 김병희 2017/03/21 16:40 # 삭제 답글

    ContentObserver 사용해서 나름 시원하게 해결했습니다.
    님의 코드에서 출발해서요 ...
    주소록이 변경되었을 때만 다시 읽어오기/[Android] http://blog.daum.net/andro_java/1061
    감사합니다.
  • 이연철 2018/04/19 18:03 # 삭제 답글

    핸드폰 연락처 이미지가 없는 경우.

    연락처 버튼 클릭시 중지로 빠져나가버리더군요.

    고로 사진부분을 빼거나 null 예외처리를 하면 될듯합니다.
댓글 입력 영역