주소록에 있는 프로필 사진을 보여주는 소스입니다.
금요일 진종일 찾아도 못 찾다가, 질문 올리고 나니 금방 해결되네요 ㅋㅋㅋ

*사파리에서 코드 하이라이터가 이상해서 그냥 텍스트로 붙여 넣습니다.



main.xml
// 메인에는 ListView 하나만 붙여넣고요
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
</LinearLayout>


view_friend_list.xml
// ListView 안에 들어가는 한 row를 꾸미는 겁니다
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:gravity="center_vertical"
    android:padding="3dp">
    <ImageView
        android:id="@+id/photo"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:scaleType="fitCenter" 
        android:src="@drawable/ic_photo"/> // ic_photo는 얼굴없을 때 사용할 사진
    <TextView 
        android:id="@+id/name"
        android:layout_marginLeft="10dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
    <TextView 
        android:id="@+id/phone"
        android:layout_marginLeft="10dip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
</LinearLayout>



AndroidManifest.xml
// 퍼미션은 이거하나만 넣어주면 돼요
<uses-permission android:name="android.permission.READ_CONTACTS"/>



Home.java
import java.io.InputStream;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.Contacts;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ResourceCursorAdapter;
import android.widget.TextView;

public class Home extends Activity 
{
private ListView lv;
 static final String[] field = new String[] {
ContactsContract.CommonDataKinds.Phone._ID,
         ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
         ContactsContract.CommonDataKinds.Phone.NUMBER,
         ContactsContract.CommonDataKinds.Phone.PHOTO_ID,
         ContactsContract.CommonDataKinds.Phone.CONTACT_ID
};
 
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        lv = (ListView)findViewById(R.id.list);
        
        Cursor c = getContentResolver().query(Contacts.CONTENT_URI, field, null,
            null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
        
        ContactListItemAdapter adapter = new ContactListItemAdapter(this, R.layout.view_friend_list, c);
        lv.setAdapter(adapter);
    }
    
// 어댑터를 커스터마이징한다.
    private final class ContactListItemAdapter extends ResourceCursorAdapter {
        public ContactListItemAdapter(Context context, int layout, Cursor c) {
            super(context, layout, c);
        }

        @Override
        public void bindView(View view, Context context, Cursor cursor) {
            ContactListItemCache cache = (ContactListItemCache) view.getTag();
            TextView nameView = cache.nameView;
            TextView phoneView = cache.phoneView;
            ImageView photoView = cache.photoView;
            
// 이름 표시
            int nameIdx = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
            String name = cursor.getString(nameIdx);
            nameView.setText(name);

// 번호 표시
           int phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            String phone = cursor.getString(phoneIdx);
            phoneView.setText(phone);
            
// 사진 표시
            ContentResolver cr = getContentResolver();
            int contactId_idx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID);
            Long contactId = cursor.getLong(contactId_idx);
            Log.e("###", contactId_idx+" | "+contactId+ " | "+name);
            
            Uri uri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
            InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, uri);
           
            // 사진없으면 기본 사진 보여주기
            if (input != null)
            { 
           Bitmap contactPhoto = BitmapFactory.decodeStream(input);
           photoView.setImageBitmap(contactPhoto);
            }
            else
            {
             photoView.setImageDrawable(getResources().getDrawable(R.drawable.ic_photo));
            }
        }
     
        @Override
        public View newView(Context context, Cursor cursor, ViewGroup parent) {
            View view = super.newView(context, cursor, parent);
            ContactListItemCache cache = new ContactListItemCache();
            cache.nameView = (TextView) view.findViewById(R.id.name);
           cache.phoneView = (TextView) view.findViewById(R.id.phone);
            cache.photoView = (ImageView) view.findViewById(R.id.photo);
            view.setTag(cache);
            return view;
        }
    }

    final static class ContactListItemCache {
        public TextView nameView, phoneView;
        public ImageView photoView;
    } 
}