【问题标题】:I want to get whatsApp profilepicture but only getting name and contactnumber?我想获取 WhatsApp 个人资料图片,但只获取姓名和联系电话?
【发布时间】:2017-06-27 06:53:25
【问题描述】:

我想获取 WhatsApp 个人资料图片和号码,但使用 contentResolver 我将使用以下 sn-p 代码仅获取名称和号码。

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());
}

我想获取 WhatsApp 个人资料图片,例如 SyncMe 应用。

我正在等待获取包含姓名、号码和缩略图的 WhatsApp 联系人列表。

【问题讨论】:

    标签: android whatsapp android-contentresolver


    【解决方案1】:

    首先,我只想重申RawContact 和Contact 之间的区别。后者是前者(代表一个帐户)的聚合(代表一个人)。

    根据您对图像的用途,最好获取聚合联系人并使用在那里选择的个人资料图像,这可以通过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);
    

    【讨论】:

    • 这里如何获取aggregateContactId?
    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 2012-08-27
    • 2017-09-09
    • 2015-06-01
    • 2015-09-22
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多