2017-02-09 1 views
19

WhatsApp 프로필 사진과 번호를 가져오고 싶지만 contentResolver를 사용하고 있습니다. 다음 스 니펫 코드를 사용하여 이름과 번호 만받습니다.whatsApp profilepicture를 가져오고 싶지만 이름과 연락처 만 받고 싶습니까?

private void showContactWhatsApp(){ 

    ContentResolver cr = getContentResolver(); 

    Cursor contactCursor = cr.query(
      ContactsContract.RawContacts.CONTENT_URI, 
      new String[]{ContactsContract.RawContacts._ID, 
        ContactsContract.RawContacts.CONTACT_ID}, 
      ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?", 
      new String[]{"com.whatsapp"}, 
      null); 


    ArrayList<String> myWhatsappContacts = new ArrayList<>(); 

    if (contactCursor != null) { 
     if (contactCursor.getCount() > 0) { 
      if (contactCursor.moveToFirst()) { 
       do { 
        //whatsappContactId for get Number,Name,Id ect... from ContactsContract.CommonDataKinds.Phone 
        String whatsappContactId = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID)); 

        if (whatsappContactId != null) { 
         //Get Data from ContactsContract.CommonDataKinds.Phone of Specific CONTACT_ID 
         Cursor whatsAppContactCursor = cr.query(
           ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
           new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
             ContactsContract.CommonDataKinds.Phone.NUMBER, 
             ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}, 
           ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", 
           new String[]{whatsappContactId}, null); 

         if (whatsAppContactCursor != null) { 
          whatsAppContactCursor.moveToFirst(); 
          String id = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID)); 
          String name = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
          String number = whatsAppContactCursor.getString(whatsAppContactCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

          whatsAppContactCursor.close(); 

          //Add Number to ArrayList 
          myWhatsappContacts.add(number); 

          Log.e(TAG, " WhatsApp contact id : " + id); 
          Log.e(TAG, " WhatsApp contact name : " + name); 
          Log.e(TAG, " WhatsApp contact number : " + number); 
         } 
        } 
       } while (contactCursor.moveToNext()); 
       contactCursor.close(); 
      } 
     } 
    } 

    Log.e(TAG, " WhatsApp contact size : " + myWhatsappContacts.size()); 
} 

SyncMe 앱과 같은 WhatsApp 프로필 사진을 가져오고 싶습니다.

이름, 번호 및 미리보기 이미지가 포함 된 WhatsApp 연락처 목록을 기다리는 중입니다.

답변

4

먼저 나는 RawContactContact의 차이점을 반복하고 싶습니다. 후자는 (계정을 대표하는) 전자의 집합체 (사람을 대표 함)입니다.

이미지 용도에 따라 집계 연락처를 가져 와서 선택한 프로필 이미지를 사용하면 Photo contract을 통해 얻을 수 있습니다. 당신이 사진이 장치에 캐시되어 있는지 확인 먼저 WhatsApp에 사진 용으로 사용하는 경우

Uri photoUri; 
Cursor photoCur = cr.query(
    ContactsContract.Data.CONTENT_URI, null, 
    ContactsContract.Data.CONTACT_ID + "=" + aggregateContactId + " AND " + 
    ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", 
    null, null 
); 
if (photoCur != null && photoCur.moveToFirst()) { 
    Uri photoId = ContentUris.withAppendedId(Contacts.CONTENT_URI, aggregateContactId); 
    photoUri = Uri.withAppendedPath(person, Contacts.Photo.CONTENT_DIRECTORY); 
} 

(단지 테스트 동안 거짓 깃발을 피하기 위해 - WhatsApp에있는 연락처를 전체 이미지를 열고 확신이 캐시 된 수 있습니다) 그러면 이미지 (API 14에서)에 대한 별도의 조회를 수행해야합니다.

Uri photoId = ContentUris.withAppendedId(RawContacts.CONTENT_URI, whatsappContactId); 
Uri photoUri = Uri.withAppendedPath(photoId, RawContacts.DisplayPhoto.CONTENT_DIRECTORY); 
+0

OP에서 작동하지 않습니까? –

관련 문제