我正在尝试获取whatsapp个人资料照片

时间:2019-02-07 14:09:55

标签: android whatsapp whatsapi

我正在尝试获取WhatsApp的个人资料照片,并且为所有拥有WhatsApp的联系人获取photoUri。

但是当尝试展示photoUri时,出现以下异常:

W/ImageView: Unable to open content: content://com.android.contacts/raw_contacts/12/display_photo
java.io.FileNotFoundException: No photo file found for ID 0

我添加了一个代码来检查文件是否存在,并且我发现该文件存在,因此不清楚为什么我会收到上述异常。

这是我用来获取照片URI的代码:

public Uri getPhotoUri(long contactId) {

Uri photoUri=null;

ContentResolver contentResolver = getContext().getContentResolver();
Cursor photoCur = contentResolver.query(
        ContactsContract.RawContacts.CONTENT_URI,null,
        ContactsContract.RawContacts.CONTACT_ID + "=" + contactId + " AND " +
                ContactsContract.RawContacts.ACCOUNT_TYPE + "= ?",
        new String[]{"com.whatsapp"}, ContactsContract.RawContacts.CONTACT_ID);

if (photoCur != null && photoCur.moveToFirst()) {
    Uri photoId = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, contactId);
    photoUri = Uri.withAppendedPath(photoId, ContactsContract.RawContacts.DisplayPhoto.CONTENT_DIRECTORY);
}

return photoUri;
}

这是我用来检查文件是否存在的代码:

    if (customer.getContactPhotoUri() != null) {

    String fullPath = customer.getContactPhotoUri().toString();
    File path = new File(fullPath);
    if (path.exists()) {
        Log.i("ZCF", "File Exists: " + fullPath);
        imageView.setImageURI(customer.getContactPhotoUri());
    } else {
        Log.i("ZCF", "File does not Exists: " + fullPath);
        imageView.setImageDrawable(context.getDrawable(R.drawable.ic_person_blue_24dp));
    }
} else {
    imageView.setImageDrawable(context.getDrawable(R.drawable.ic_person_blue_24dp));
}

此代码的结果是:

  

I / ZCF:文件存在:   content://com.android.contacts/raw_contacts/12/display_photo

1 个答案:

答案 0 :(得分:0)

Whatsapp不会使用ContactsContract存储联系人照片,因此您将无法访问它们。

照片存储在内部驱动器上的Whatsapp文件夹中,您可以使用文件浏览器应用程序手动查看它们,但是这些文件夹无法被应用程序访问,因此您无法通过编程方式访问它们。

这显然是故意的,因为Whatsapp不想让他们的照片泄露到应用程序之外。