CJara
CJara

Reputation: 69

Save photo contact programmatically - Android

Im actually doing this:

    InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(context.getContentResolver(),
            ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(contactId)));

    if (inputStream != null) {
        photo = BitmapFactory.decodeStream(inputStream);
    }else{
        // To open up a gallery browser
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Seleccione una imagen para el contacto"),1);
    }
    return photo;

With that code Im retrieving the contact photo by phone number, and when the contact doesn´t have a photo I need to save a selected photo by intent from gallery:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {

        if (requestCode == 1) {
            currImageURI = data.getData();
            try {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), currImageURI);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

Someone know how to save this bitmap in a contact? Thanks!.

Upvotes: 1

Views: 821

Answers (1)

Ashish Singh
Ashish Singh

Reputation: 105

Use this code:

ByteArrayOutputStream stream = new ByteArrayOutputStream();
            if(mBitmap!=null){    // If an image is selected successfully
                mBitmap.compress(Bitmap.CompressFormat.PNG , 75, stream);

                // Adding insert operation to operations list
                // to insert Photo in the table ContactsContract.Data
                ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
                        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactID)
                        .withValue(ContactsContract.Data.IS_SUPER_PRIMARY, 1)
                        .withValue(ContactsContract.Data.MIMETYPE,Photo.CONTENT_ITEM_TYPE)
                        .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO,stream.toByteArray())
                        .build());

                try {
                    stream.flush();
                }catch (IOException e) {
                    e.printStackTrace();
                }
            }

Upvotes: 3

Related Questions