마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드 주소록 API ??

0 추천
현재는 안드로이드 sdk에서 기본으로 제공하는

android.provider.ContactsContract; 를 쓰고 있어요.

그런데 이것은 한사람에 여러전화번호를 갖고잇을때 그중에 하나만 가져오는거 같더군요.

아무리 구글링을 해도 여러개 가져오는걸 못하겠어요 ㅠㅠ...

다른 주소록API에는 한사람에 여러전화번호를 가져올수있게 제공하나요???

아니면 지금것도 가능한가요...?? 방법좀 자세히 설명해주세요 ㅠ.ㅠ

Cursor 개념을 몰라서 그런지 너무 어렵습니당.
슈퍼꽃붕어 (1,600 포인트) 님이 2014년 6월 25일 질문

1개의 답변

0 추천
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(
ContactsContract.Contacts.CONTENT_URI,null,null,null,"display_name"); 
 
int ididx = cursor.getColumnIndex(ContactsContract.Contacts._ID);
int nameidx = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
 
StringBuilder result = new StringBuilder();
while (cursor.moveToNext()) {
result.append(cursor.getString(nameidx) + " :"); 
 
// 전화 번호는 서브 쿼리로 조사해야 함.
String id = cursor.getString(ididx);
Cursor cursor2 = cr.query(ContactsContract.CommonDataKinds.
Phone.CONTENT_URI, null, 
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
new String[]{id}, null);
 
int typeidx = cursor2.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.TYPE);
int numidx = cursor2.getColumnIndex(
ContactsContract.CommonDataKinds.Phone.NUMBER);
 
// 전화의 타입에 따라 여러 개가 존재한다.
while (cursor2.moveToNext()) {
String num = cursor2.getString(numidx);
switch (cursor2.getInt(typeidx)) {
case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
result.append(" Mobile:" + num);
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
result.append(" Home:" + num);
break;
case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
result.append(" Work:" + num);
break;
}
cursor2.close();
result.append("\n");
}
cursor.close();
whdrb19 (23,520 포인트) 님이 2014년 6월 25일 답변
오류는 안나는데 실행해보니 아무것도 안뜨는데요.....
아니에요 잘되네요. 감사합니다. 그런데 회사 원래 소스를 바꿔나도 되는건지 모르겠네...ㅋㅋ
...