[英]How to get all contacts merged with given contact
我正在尝试显示联系人列表以及与之相关的照片,但是我看到大多数没有照片的联系人,尽管当我进入手机的默认(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);
}
底线-我想做的是显示联系人的照片,无论它是来自符合搜索条件的联系人-还是与该联系人合并的任何联系人-任何解决方案都将不胜感激!
谢谢!
(我从我们的Facebook页面来到这里。)
这是我如何从内容解析器获取所有联系人的方法:
public void addContactsMultiple()
{
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
null, null, null, null);
if (cur.getCount() > 0) {
String id="";//Contact ID
String name="";//Contact Name
id = "";
id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if(Integer.parseInt
(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
//Getting the Contact Image
if(cur.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI)) != null)
{
imagePath = cur
.getString(cur
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.PHOTO_URI));
}
else {imagePath="none";}//If there is no contact image
}
}
cur.close();
}
在我的代码中,您将获得图像URI,然后将其放入Contact对象中,然后就可以使用
ImageView image = (ImageView)findViewById(R.id.image)
image.setImageURI(Uri.parse(imagePath));
或者您可以使用Picasso Image Loader: Picasso
然后使用以下代码:
Picasso.with(context)
.load(imagePath)
.skipMemoryCache()
.into(image );
如您所见,我不使用BitMaps或解码流。 您只需要照片的uri(它将您的图像定向到Android画廊)
如果您从同一个名字得到多个联系人,则可以使用以下代码对它们进行嫁接:
//(mContactList) is the ArrayList of contacts object I have created)
HashSet<Contact> hs = new HashSet<Contact>();
hs.addAll(mContactList);
mContactList.clear();
mContactList.addAll(hs);
此代码将删除重复项
稍作调整,您就可以将图像uri移至其所属的联系人。
如果您还有其他问题,请回来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.