Il codice che hai fornito dovrebbe solo accedere alla foto predefinita. Inoltre, dovresti aggiungere l'ID contatto a quell'URI, non l'ID foto (presumendo che tu stia utilizzando l'id della foto dalla tabella dati).
Se ci sono più foto si potrebbe voler provare ad accedervi direttamente dalla tabella Dati. Avrai bisogno di analizzare un cursore di database e convertire i dati di byte grezzi in una bitmap manualmente come illustrato di seguito:
String[] projection = {ContactsContract.CommonDataKinds.Photo.PHOTO};
Uri uri = Uri. ContactsContract.Data.CONTENT_URI;
String where = ContactsContract.Data.MIMETYPE
+ "=" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + " AND "
+ ContactsContract.Data.CONTACT_ID + " = " + mContactId;
Cursor cursor = context.getContentResolver().query(uri, projection, null, null, null);
if(cursor!=null&&cursor.moveToFirst()){
do{
byte[] photoData = photoCursor.getBlob(0);
Bitmap photo = BitmapFactory.decodeByteArray(photoData, 0,
photoData.length, null);
//Do whatever with your photo here...
}while(cursor.moveToNext());
}
si vorrebbe mContactId per corrispondere con il contatto che si desidera fotografie.
Se si desidera limitare solo alle foto di Facebook, è necessario utilizzare ContactsContract.Data.RAW_CONTACT_ID invece, che si dovrebbe ottenere dalla tabella RawContacts utilizzando l'ID di contatto e un filtro basato sull'account Facebook (assumendo che sai cosa conto che stai cercando ... che può variare a seconda del fornitore di implementazione sync ...)
fonte
2010-10-04 00:54:42
Sto riscontrando lo stesso problema. Sembra che il problema si verifichi con i contatti che sono sincronizzati solo con FB. Per i contatti sincronizzati da più fonti, ad esempio Twitter e FB, va bene. –