2011-09-26 6 views
2

HTC 범례가 있습니다. 전화 연락처에는 4-5 개의 연락처가 표시됩니다.하지만 내 응용 프로그램에서 쿼리하면 거의 45 개의 연락처가 표시됩니다. Gmail의 메일 주소라고 생각합니다.ContactsContract API의 문제 android

String[] Projection = new String[] { ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.Contacts.PHOTO_ID, 
      ContactsContract.Contacts.HAS_PHONE_NUMBER, 
      ContactsContract.Contacts.STARRED}; 

커서 커서 = managedQuery (ContactsContract.Contacts.CONTENT_URI, 프로젝션, NULL, NULL, NULL);

나는 사진과 함께 모든 세부 사항을 listview에서도 얻고있다. 지금은 그의 모든 전화 번호, 이메일, 사진 등의 특정 연락처 정보를 얻을 필요가 등등입니다이 내가이 쿼리

final String[] projection = new String[] { 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Phone.TYPE, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.IS_PRIMARY, 
    }; 
    final Cursor phone = managedQuery(
      ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
      projection, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", 
      new String[]{contactId}, 
      null); 
내가 전화 연락의 모든 세부 사항을 얻고있다
> if(phone.moveToFirst()) { 
>    final int contactNumberColumnIndex = 
> phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
>    final int contactTypeColumnIndex = 
> phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE); 

을 쓰고 있어요 다른 모든 연락처는 아닙니다. 나는이 모든 세부 정보가 공유 테이블 (ContactsContract.Data.CONTENT_URI)에 저장되어 있음을 읽었지만 정확하게 수행 할 수 없으므로이 작업을 완료해야합니다.

다른 사람이 어떻게하는지 이해할 수 있습니까?

감사

답변

3

당신은 같은 것을 할 수 있습니다 : 커서를 통해

getContentResolver().query(
    RawContactsEntity.CONTENT_URI, 

    // projection 
    new String[] { 
     BaseColumns._ID, 
     RawContactsEntity.MIMETYPE, 

     // DATA columns are interpreted according to MIMETYPE 
     // Project only union of data columns needed 
     RawContactsEntity.DATA1, 
     RawContactsEntity.DATA2, 
     RawContactsEntity.DATA3, 
     RawContactsEntity.DATA4, 
     RawContactsEntity.DATA7, 
     RawContactsEntity.DATA9, 
     RawContactsEntity.DATA10, 
    }, 

    // selection 
    RawContactsEntity.DELETED + "<>1 AND " + 
    RawContactsEntity.MIMETYPE + " IN ('" + 
    StructuredName.CONTENT_ITEM_TYPE + "','" + 
    Email.CONTENT_ITEM_TYPE + "','" + 
    Phone.CONTENT_ITEM_TYPE + "','" + 
    StructuredPostal.CONTENT_ITEM_TYPE + "','" + 
    Organization.CONTENT_ITEM_TYPE + "')", 

    // selection params 
    null, 

    // sorting 
    null); 

다음으로 반복을 먼저 읽어 MIME 타입 :

final String mimeType = cursor.getString(cursor.getColumnIndex(
    RawContactsEntity.MIMETYPE)); 

그리고 MIME 유형에 따라 해당 데이터 읽기 종류 :

if (StructuredName.CONTENT_ITEM_TYPE.equals(mimeType)) { 
    readNameData(cursor); 
} else if (Email.CONTENT_ITEM_TYPE.equals(mimeType)) { 
    addEmailData(cursor); 
} 

등등.

+0

Thanks Stipa answer. – Rishi

+0

나 같은 게으른 개발자를위한 매우 유용합니다. –