我可以直接从calllog.calls提供商那里得到一张照片

时间:2015-01-13 21:42:25

标签: android android-contacts calllog

我想从callLog获得联系人照片(如果有的话)。

现在我知道我可以获取该号码,然后向联系人提供商查询联系人ID。

然而我想知道是否有更好的方法直接从callLog.calls表中获取照片uri。 是什么让我相信它可能是在文档中我遇到两个有趣的领域的事实:

1) CACHED_LOOKUP_URI - 用于查找与电话号码关联的联系人的缓存URI(如果存在)。

2) CACHED_PHOTO_ID - 与电话号码关联的图片的缓存照片ID(如果存在)。

现在如果可以做到如何,如果它不能完成,我想知道这些字段用于什么, THX

2 个答案:

答案 0 :(得分:1)

您可以获取其ID。然后你必须从ContactsContract检索实际图像。

imageDataRow = c.getInt(c.getColumnIndex(CallLog.Calls.CACHED_PHOTO_ID));
Cursor c = mContext.getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[]{
            ContactsContract.CommonDataKinds.Photo.PHOTO
    }, ContactsContract.Data._ID + "=?", new String[]{
            Integer.toString(imageDataRow)
    }, null);
    byte[] imageBytes = null;
    if (c != null) {
        if (c.moveToFirst()) {
            imageBytes = c.getBlob(0);
        }
        c.close();
    }
Bitmap photo = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);

答案 1 :(得分:0)

大多数情况下,我使用Glide在视图上设置图像。  的 SDK> = 23

c.getString(c.getColumnIndex(CallLog.Calls.CACHED_PHOTO_URI));

SDK< 23

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(num));
        Cursor cursor = getContext().getContentResolver().query(uri, null, null, null, null);

        if (cursor != null && cursor.moveToNext()) {
            image_uri = cursor.getString(cursor.getColumnIndex(ContactsContract.PhoneLookup.PHOTO_URI));
            //Log.d(TAG, "image_uri "+image_uri);
        }
        if(cursor !=null)
            cursor.close();