Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

retrieving photo and name from contacts in android

With my present code I am getting only the contact number. But I want to get contact's name and contact's photo path. Have tried many codes by googling, but I am not able to get it done. Tried this too, but got FileNotFoundException. Can someone please help me achieve that by adding code snippets to the below code?

public void getContact(View view)
{

         Intent intent = new Intent(Intent.ACTION_PICK);
         intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
         startActivityForResult(intent, 1); 

}

protected void onActivityResult(int requestCode, int resultCode,Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

             if(resultCode==RESULT_OK && requestCode == 1)
        {
            if (data != null) {
                Uri uri = data.getData();

                if (uri != null) {
                    Cursor c = null;
                    try {
                        c = getContentResolver().query(uri, new String[]{ 
                                    ContactsContract.CommonDataKinds.Phone.NUMBER,  
                                    ContactsContract.CommonDataKinds.Phone.TYPE },
                                null, null, null);

                        if (c != null && c.moveToFirst()) {
                            String phoneNumber = c.getString(0);
                            int type = c.getInt(1);      
                        }
                    } finally {
                        if (c != null) {
                            c.close();
                        }
                    }
                }
            }
        }
         }
like image 846
Apparatus Avatar asked Jul 21 '13 05:07

Apparatus


People also ask

Where are contact photos stored on Android?

If contacts are saved in the internal storage of your Android phone, they will be stored specifically in the directory of /data/data/com. Android. providers. contacts/databases/contacts.


2 Answers

This code traverses all contacts and gets their first name, last name and photo as a bitmap:

Cursor cursor = App
            .getInstance()
            .getContentResolver()
            .query(ContactsContract.Contacts.CONTENT_URI, null, null, null,
                    null);

    if (cursor != null && cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID));

            // get firstName & lastName
            Cursor nameCur = App.getInstance().getContentResolver()
                    .query(ContactsContract.Data.CONTENT_URI,
                            null,
                            ContactsContract.Data.MIMETYPE
                                    + " = ? AND "
                                    + StructuredName.CONTACT_ID
                                    + " = ?",
                            new String[] {
                                    StructuredName.CONTENT_ITEM_TYPE,
                                    Long.valueOf(id).toString() }, null);
            if (nameCur != null) {
                if (nameCur.moveToFirst()) {

                    String displayName = nameCur.getString(nameCur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    if (displayName == null) displayName = "";

                    String firstName  = nameCur.getString(nameCur.getColumnIndex(StructuredName.GIVEN_NAME));
                    if (firstName == null) firstName = "";
                    Log.d("--> ", firstName.length()>0?firstName:displayName);

                    String middleName = nameCur.getString(nameCur.getColumnIndex(StructuredName.MIDDLE_NAME));
                    if (middleName == null) middleName = "";

                    String lastName = nameCur.getString(nameCur.getColumnIndex(StructuredName.FAMILY_NAME));
                    if (lastName == null) lastName = "";

                    lastName = middleName + (middleName.length()>0?" ":"") + lastName;

                    Log.d("--> ", lastName);
                }
                nameCur.close();
            }

            Bitmap photo = null;

            try {
                InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(App.getContext().getContentResolver(),
                        ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(id)));

                if (inputStream != null) {
                    photo = BitmapFactory.decodeStream(inputStream);
                }

                if (inputStream != null) inputStream.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

            Log.d("--> ", photo);
        }
    }

    if (cursor != null) { cursor.close(); }

You also needs this permission: <uses-permission android:name="android.permission.READ_CONTACTS" />

Hope that helps!

like image 52
Asif Mujteba Avatar answered Sep 28 '22 09:09

Asif Mujteba


try this:

contact is identified by getId()

/**
 * @return the photo URI
 */
public Uri getPhotoUri() {
    try {
        Cursor cur = this.ctx.getContentResolver().query(
                ContactsContract.Data.CONTENT_URI,
                null,
                ContactsContract.Data.CONTACT_ID + "=" + this.getId() + " AND "
                        + ContactsContract.Data.MIMETYPE + "='"
                        + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'", null,
                null);
        if (cur != null) {
            if (!cur.moveToFirst()) {
                return null; // no photo
            }
        } else {
            return null; // error in cursor process
        }
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long
            .parseLong(getId()));
    return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
}

Usage is:

Uri u = objItem.getPhotoUri();
if (u != null) {
        mPhotoView.setImageURI(u);
} else {
        mPhotoView.setImageResource(R.drawable.ic_contact_picture_2);
}
like image 25
ramin eftekhari Avatar answered Sep 28 '22 09:09

ramin eftekhari