LookUP_KeyおよびOpenContactPhotoInputStreamのコンビニエンスメソッドを介して連絡先画像をロードします
-
26-10-2019 - |
質問
APIドキュメントで提案されているように、_IDの代わりにLookUP_Keyを使用して連絡先に関する情報を保存するようにアプリを変更しています。私が抱えている唯一の問題は、連絡先の写真をロードできなくなったことです。
問題のあるコードはこれです:
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;
}
所属していません StackOverflow