Get contact photo as Bitmap with the name of the person. - Android Account

Android examples for Account:Contact Name

Description

Get contact photo as Bitmap with the name of the person.

Demo Code


//package com.java2s;
import android.content.ContentUris;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import java.io.IOException;
import java.io.InputStream;

public class Main {
    /**//from w w  w. j a v  a2  s . c o  m
     * Get contact photo as Bitmap with the name of the person.
     *
     * @param context   Context object of the caller.
     * @param name      Name of the contact.
     * @return          Bitmap object of the large contact photo.
     */
    public static Bitmap getContactPhoto(Context context, String name) {
        InputStream inputStream = openDisplayPhoto(context,
                getContactId(name, context));

        return BitmapFactory.decodeStream(inputStream);
    }

    /**
     * Get the InputStream object of the contact photo with given contact ID.
     *
     * @param context       Context object of the caller.
     * @param contactId     Contact ID.
     * @return              InputStream object of the contact photo.
     */
    public static InputStream openDisplayPhoto(Context context,
            long contactId) {
        Uri contactUri = ContentUris.withAppendedId(
                ContactsContract.Contacts.CONTENT_URI, contactId);
        Uri displayPhotoUri = Uri.withAppendedPath(contactUri,
                ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
        try {
            AssetFileDescriptor fd = context.getContentResolver()
                    .openAssetFileDescriptor(displayPhotoUri, "r");
            return fd.createInputStream();
        } catch (IOException e) {
            return null;
        }
    }

    /**
     * Get contact ID with the given contact name.
     *
     * @param name      Name of the contact.
     * @param context   Context object of the caller.
     * @return          Contact ID.
     */
    public static long getContactId(String name, Context context) {
        long ret = -1;
        String selection = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
                + " like'%" + name + "%'";
        String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.CONTACT_ID };
        Cursor c = context.getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                projection, selection, null, null);
        if (c.moveToFirst()) {
            ret = c.getLong(0);
        }
        c.close();

        return ret;
    }
}

Related Tutorials