【发布时间】:2023-03-14 16:48:01
【问题描述】:
我正在尝试显示联系人列表以及与他们关联的照片,但是当我转到手机 (SG2) 的默认联系人列表时,我看到大多数联系人没有照片,尽管他们确实有照片。我认为这是因为其中一些联系人实际上是合并的,而图片来自列表中未显示的(原始?)联系人,所以问题是 - 如何将所有联系人与给定联系人合并?我尝试使用 SQLite,但找不到任何可以唯一标识合并联系人的列。
从代码的角度来看,我是从这个方法开始的: protected Bitmap getImageByContactId(final Context appContext, final String strContactId) { 位图 bmContactImage = null;
Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(strContactId));
Uri photoUri = Uri.withAppendedPath(contactUri, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
InputStream image = null;
try {
image = appContext.getContentResolver().openInputStream(photoUri);
bmContactImage = BitmapFactory.decodeStream(image);
try {
image.close();
} catch (IOException e ) {
e.printStackTrace();
}
} catch (FileNotFoundException e1) {
// This can be ignored because the Uri is generic and photo may not really exist
}
return bmContactImage;
}
但这仅返回与匹配原始搜索条件的“原始”联系人关联的照片(在我的情况下 - 联系人 ID) - 如果图片与链接到原始联系人的联系人相关联,则不会。
如果我只能获得与原始联系人链接/关联/合并的联系人的(原始?)ID,我希望能够进行以下工作,但我似乎无法找到找到的方法那些“其他”联系人...
public static Bitmap loadContactPhoto(ContentResolver cr, long id) {
Uri uri = Uri.parse(String.format("content://com.android.contacts/contacts/%s", id));
InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
if (input == null) {
return null;
}
return BitmapFactory.decodeStream(input);
}
底线 - 我要做的是显示联系人的照片,无论它是来自与搜索条件匹配的联系人 - 还是与该联系人合并的任何联系人 - 任何解决方案都将不胜感激!
谢谢!
【问题讨论】:
-
如果您发布代码,尝试帮助您会更容易...
标签: android android-sqlite contacts photo