我想从callLog获得联系人照片(如果有的话)。
现在我知道我可以获取该号码,然后向联系人提供商查询联系人ID。
然而我想知道是否有更好的方法直接从callLog.calls表中获取照片uri。 是什么让我相信它可能是在文档中我遇到两个有趣的领域的事实:
1) CACHED_LOOKUP_URI - 用于查找与电话号码关联的联系人的缓存URI(如果存在)。
2) CACHED_PHOTO_ID - 与电话号码关联的图片的缓存照片ID(如果存在)。
现在如果可以做到如何,如果它不能完成,我想知道这些字段用于什么, THX
答案 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();