2017-10-04 7 views
0

아래 코드를 사용하여 생일은 &으로 바뀌 었습니다. 그러나 나는 또한 전화 번호 & 이메일을 필요로한다. 누구든지 나를 도울 수 있다면 좋을 것입니다. 감사. 영사에서Android : 연락처, 전화 번호, 이메일, 생일 검색

private void getContacts() { 
    Uri uri = ContactsContract.Data.CONTENT_URI; 

    String[] projection = new String[]{ 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Email.DATA, 
      ContactsContract.CommonDataKinds.Event.START_DATE 
    }; 

    String where = ContactsContract.Data.MIMETYPE + "= ? AND " + 
      ContactsContract.CommonDataKinds.Event.TYPE + "=" + 
      ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY; 
    String[] selectionArgs = new String[]{ 
      ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE 
    }; 
    String sortOrder = null; 
    ContentResolver contentResolver = this.getActivity().getContentResolver(); 
    Cursor cursor = contentResolver.query(uri, projection, where, selectionArgs, sortOrder); 

    int nameColumn = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME); 
    int numberColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
    int emailColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); 
    int bithDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE); 
    while (cursor.moveToNext()) { 
     String name = cursor.getString(nameColumn); 
     String number = cursor.getString(numberColumn); 
     String email = cursor.getString(emailColumn); 
     String birthDay = cursor.getString(bithDayColumn); 
     Log.d(TAG, "Birthday: " + birthDay); 
    } 
} 

답변

1

은 만 MIMETYPE CommonDataKinds.Event.CONTENT_ITEM_TYPE의 행에 쿼리를 제한하고, 그래서 당신은 생일을 얻을 것이다.

전자 메일 및 전화 MIME 형식을 요청해야하지만이 추가 정보는 동일한 연락처에 대해 별도의 행으로 제공됩니다. 예를 들어 2 개의 전화, 3 개의 이메일 및 생일을 가진 연락처 A의 경우 커서에 6 개의 결과가 표시됩니다. 따라서 CONTACT_ID 필드를 사용하여 이들을 모두 그룹화해야합니다.

여기에 간단한 코드, 당신은 시작하는 결과의 HashMap를 인쇄 할 그리고 당신은 각 연락처에 모두 그/그녀의 이름, 이메일, 전화, 생일 얻을 것이다 :

Map<Long, List<String>> contacts = new HashMap<Long, List<String>>(); 

String[] projection = {Data.CONTACT_ID, Data.DISPLAY_NAME, Data.MIMETYPE, Data.DATA1, Data.DATA2, Data.DATA3}; 

// query only emails/phones/events 
String selection = Data.MIMETYPE + " IN ('" + Phone.CONTENT_ITEM_TYPE + "', '" + Event.CONTENT_ITEM_TYPE"', '" + Email.CONTENT_ITEM_TYPE + "')"; 
Cursor cur = cr.query(Data.CONTENT_URI, projection, selection, null, null); 

while (cur != null && cur.moveToNext()) { 
    long id = cur.getLong(0); 
    String name = cur.getString(1); // full name 
    String mime = cur.getString(2); // type of data (phone/birthday/email) 
    String data = cur.getString(3); // the actual info, e.g. +1-212-555-1234 

    String kind = "unknown"; 

    switch (mime) { 
     case Phone.CONTENT_ITEM_TYPE: 
      kind = "phone"; 
      break; 
     case Event.CONTENT_ITEM_TYPE: 
      Event = "birthday"; 
      break; 
     case Email.CONTENT_ITEM_TYPE: 
      Event = "email"; 
      break; 
    } 
    Log.d(TAG, "got " + id + ", " + name + ", " + kind + " - " + data); 

    // add info to existing list if this contact-id was already found, or create a new list in case it's new 
    List<String> infos; 
    if (contacts.containsKey(id)) { 
     infos = contacts.get(id); 
    } else { 
     infos = new ArrayList<String>(); 
     infos.add("name = " + name); 
     contacts.put(id, infos); 
    } 
    infos.add(kind + " = " + data); 
}