在我的应用中使用默认的联系人选择器照片

时间:2011-06-06 19:00:24

标签: android contacts

在我的应用程序中,我有一个联系人列表视图,其中包含基本信息(姓名,电话号码)以及联系人图像,与默认的Android联系人选择器非常相似。如果联系人没有图像,则会在其位置显示应用程序图标。但是,我想使用联系人选择器使用的默认轮廓图像。我的问题是如何访问此图像并在我的应用程序中使用它?以下是加载联系人图片的代码部分:

Contact c = new Contact();

    final String[] projection = new String[] {
        Contacts.DISPLAY_NAME, // the name of the contact
        Contacts.PHOTO_ID // the ID of the column in the data table for the image
    };


    final Cursor contact = getContentResolver().query(
        Contacts.CONTENT_URI,
        projection,
        Contacts._ID + "=?", // filter entries on the basis of the contact id
        new String[] {String.valueOf(contactId)}, // the parameter which the contact id column is compared to
        null
    );

    if(contact.moveToFirst()) {
        final String name = contact.getString(
                contact.getColumnIndex(Contacts.DISPLAY_NAME));
        final String photoId = contact.getString(
                contact.getColumnIndex(Contacts.PHOTO_ID));

        // Get photo data for this contact
        if(photoId != null) {
            final Cursor photo = managedQuery(
                Data.CONTENT_URI,
                new String[] {Photo.PHOTO}, // column for the photo blob
                Data._ID + "=?", // select row by id
                new String[] {photoId}, // filter by photoId
                null
            );

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

                c.setPhoto(photoBitmap);
            }


        }



        c.setName(name);

以下是我的ContactAdapter类中的代码,它将ImageView与联系人照片相关联:

ImageView photo = (ImageView) v.findViewById(R.id.contact_photo);

if(photo != null) {
            if(c.hasPhoto()) photo.setImageBitmap(c.getPhoto());
            else photo.setImageResource(R.drawable.app_icon);
        }

1 个答案:

答案 0 :(得分:3)

Android中实际使用了3种不同的图像。您可以在模拟器附带的资源的drawable文件夹中找到它们,也可以从这里下载它们:

enter image description here enter image description here enter image description here