我正在修改我的应用程序,以使用LOOKUP_KEY而不是API文档建议的_ID来存储有关联系人的信息.我遇到的唯一问题是我无法再加载联系人的照片. 有问题的代码是这样的: InputStream s = Contacts
有问题的代码是这样的:
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; }