访问联系人照片 - 联系人ID和照片位置不匹配

时间:2014-09-16 01:11:47

标签: android listview contacts photo

我有一个ListView,我想分别在ImageView和TextView中显示联系人图片和联系人姓名。我能够使用联系人姓名生成ListView,但是我遇到了图像问题。注意:我已在此处和网上阅读了数百篇帖子,并没有描述我找到的问题或可能的解决方案。

在访问照片的所有方法中,没有一个方法允许您使用ContactsContract.Contacts中的PHOTO_URI进行访问。所有方法都涉及访问联系人_ID,使用它来使用ContentUris.withAppendedId生成联系URI,然后使用它来生成InputStream等。

这是我的问题。 PHOTO_URI和contact_ID不匹配。例如:

约翰史密斯 Contact_ID = 905 PHOTO_URI = content://com.android.contacts/contacts/270/photo

这导致几乎没有联系人照片甚至出现,实际上只有57个中有2个,而那些确实显示的是错误的联系人。也就是说,从上面的示例中,John的照片显示在Mark旁边,因为Mark的Contact_ID = 270。其他55个联系人没有任何照片显示,因为没有匹配的照片和ID,即使其中超过30个实际上有照片。

第二个问题是某些PHOTO_URI是不同的路径结构,例如 内容://com.android.contacts/display_photo/3

我在这里完全失败了。这是我的自定义适配器中的bindView()代码,它试图访问这些照片。

public void bindView(View view, Context context, Cursor cursor) {

    ContentResolver cr = context.getContentResolver();

    //cursor is contactsCursor from FriendsContactFragment
    //{CONTACTS_ID, DISPLAY_NAME, PHOTO_URI, GROUP_ROW_ID, LOOKUP_KEY}

    //get the ViewHolder object saved in newView()
    ViewHolder viewHolder = (ViewHolder) view.getTag();

    long contactId = cursor.getLong(0);
    Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);

    InputStream photoData = ContactsContract.Contacts.openContactPhotoInputStream(cr, contactUri);
    Bitmap bm = BitmapFactory.decodeStream(photoData);

    if(bm != null){
        viewHolder.imageView.setImageBitmap(bm);
    }else{
        viewHolder.imageView.setImageResource(R.drawable.ic_friends_c);
    }

    //adding additional info to output for debugging
    viewHolder.textView.setText(cursor.getString(1) + "\nCONTACT_ID: " + cursor.getString(0) + "\nCONTACT_URI: " + contactUri + "\nPHOTO_URI: " + cursor.getString(2) + "\nphotoData: " + photoData);


}

0 个答案:

没有答案
相关问题