2017-02-09 5 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で実現できます。

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の写真のために特別に使用している場合 - のWhatsAppでの連絡先の完全な画像を開いて、あなたはそれがキャッシュされたことを確認することができます)場合は、画像(API 14から)を別に参照する必要があります:

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

これはOPでは機能しませんでしたか? –

関連する問題