其他分享
首页 > 其他分享> > android – 通过LOOKUP_KEY和openContactPhotoInputStream方便方法加载联系人图片

android – 通过LOOKUP_KEY和openContactPhotoInputStream方便方法加载联系人图片

作者:互联网

我正在修改我的应用程序,以使用LOOKUP_KEY而不是API文档建议的_ID来存储有关联系人的信息.我遇到的唯一问题是我无法再加载联系人的照片.

有问题的代码是这样的:

InputStream s = ContactsContract.Contacts.openContactPhotoInputStream(getContentResolver(), contactUri);

这将返回以下错误:java.lang.IllegalArgumentException:URI:content://com.android.contacts/contacts/lookup/1424i118.2312i1220228108/photo

我用作参数的contactUri由以下内容获取:Uri contactUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI,contact_key);

在这个例子中,contact_key是1424i118.2312i1220228108

基于API文档,此帮助程序方法应该与我正在使用的CONTENT_URI或CONTENT_LOOKUP_URI一起使用.

有任何想法吗?谢谢.

解决方法:

对于有类似问题的人来说,这对我有用:

public Bitmap getPhoto(Uri uri){
    Bitmap photoBitmap = null;

    String[] projection = new String[] { ContactsContract.Contacts.PHOTO_ID };

    Cursor cc = getContentResolver().query(uri, projection, null, null, null);

    if(cc.moveToFirst()) {
        final String photoId = cc.getString(cc.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
        if(photoId != null) {
            final Cursor photo = managedQuery(
                    Data.CONTENT_URI,
                    new String[] {Photo.PHOTO},
                    Data._ID + "=?",
                    new String[] {photoId},
                    null
            );

            // Convert photo blob to a bitmap
            if(photo.moveToFirst()) {
                byte[] photoBlob = photo.getBlob(photo.getColumnIndex(Photo.PHOTO));
                photoBitmap = BitmapFactory.decodeByteArray(photoBlob, 0, photoBlob.length);
            }

            photo.close();
        }

    } 
    cc.close();

    return photoBitmap;
}

标签:android,android-contacts,contactscontract
来源: https://codeday.me/bug/20190729/1575706.html