1

I'm using ContactsContract to export contact to contact app. Everything works fine on every other devices, but on Sony Xperia phones all I can't save data I've put into ArrayList<ContentValues> data. My code looks like this:

ArrayList<ContentValues> data = new ArrayList<ContentValues>();

    //Add photo
    if (userImageBitmap != null) {
        ContentValues photoRow = new ContentValues();
        photoRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
        photoRow.put(ContactsContract.CommonDataKinds.Photo.PHOTO, bitmapToByteArray(userImageBitmap));
        data.add(photoRow);
    }


    //Add phone home number
    if (contact.getUserPhoneLandline() != null) {
        ContentValues userLandlinePhoneRow = new ContentValues();
        userLandlinePhoneRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        userLandlinePhoneRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getUserPhoneLandline());
        userLandlinePhoneRow.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_HOME);
        data.add(userLandlinePhoneRow);
    }

    //Add phone mobile number
    if (contact.getUserPhoneMobile() != null) {
        ContentValues userMobilePhoneRow = new ContentValues();
        userMobilePhoneRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        userMobilePhoneRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getUserPhoneMobile());
        userMobilePhoneRow.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
        data.add(userMobilePhoneRow);
    }

    //Add user work fax number
    if (contact.getCompanyFax() != null) {
        ContentValues faxRow = new ContentValues();
        faxRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        faxRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getCompanyFax());
        faxRow.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK);
        data.add(faxRow);
    }

    //Add user stationary work phone
    if (contact.getCompanyPhoneLandline() != null) {
        ContentValues stationaryWorkPhoneRow = new ContentValues();
        stationaryWorkPhoneRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        stationaryWorkPhoneRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getCompanyPhoneLandline());
        stationaryWorkPhoneRow.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
        data.add(stationaryWorkPhoneRow);
    }

    //Add user mobile work phone
    if (contact.getCompanyPhoneMobile() != null) {
        ContentValues mobileWorkPhoneRow = new ContentValues();
        mobileWorkPhoneRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        mobileWorkPhoneRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.getCompanyPhoneMobile());
        mobileWorkPhoneRow.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE);
        data.add(mobileWorkPhoneRow);
    }


    //Add company email
    if (contact.getUserEmail() != null) {
        ContentValues emailHomeRow = new ContentValues();
        emailHomeRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
        emailHomeRow.put(ContactsContract.CommonDataKinds.Email.ADDRESS, contact.getUserEmail());
        emailHomeRow.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_HOME);
        data.add(emailHomeRow);
    }

    if (contact.getCompanyEmail() != null) {
        ContentValues emailWorkRow = new ContentValues();
        emailWorkRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);
        emailWorkRow.put(ContactsContract.CommonDataKinds.Email.ADDRESS, contact.getCompanyEmail());
        emailWorkRow.put(ContactsContract.CommonDataKinds.Email.TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);
        data.add(emailWorkRow);
    }

    //Add company website
    if (contact.getCompanyWebsite() != null) {
        ContentValues websiteWorkRow = new ContentValues();
        websiteWorkRow.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
        websiteWorkRow.put(ContactsContract.CommonDataKinds.Website.URL, contact.getCompanyWebsite());
        websiteWorkRow.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_WORK);
        data.add(websiteWorkRow);
    }


    Intent intent = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
    intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data);
    //Add company info
    if (contact.getCompanyName() != null) {
        intent.putExtra(ContactsContract.Intents.Insert.COMPANY, contact.getCompanyName());
    }
    //Add title info
    if (contact.getUserCorporateTitle() != null) {
        intent.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, contact.getUserCorporateTitle());
    }
    //Add address info
    StringBuilder addressBuilder = new StringBuilder();
    if (contact.getCompanyAddress() != null) {
        addressBuilder.append(contact.getCompanyAddress());
    }
    if (contact.getCompanyPostcode() != null) {
        addressBuilder.append(" ").append(contact.getCompanyPostcode());
    }
    if (contact.getCompanyCity() != null) {
        addressBuilder.append(" ").append(contact.getCompanyCity());
    }
    if (contact.getCompanyCountry() != null) {
        addressBuilder.append(" ").append(contact.getCompanyCountry());
    }
    intent.putExtra(ContactsContract.Intents.Insert.POSTAL, addressBuilder.toString());
    intent.putExtra(ContactsContract.Intents.Insert.POSTAL_TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK);
    //Add contact name and surname
    if (contact.getUserNameAndSurname() != null) {
        intent.putExtra(ContactsContract.Intents.Insert.NAME, contact.getUserNameAndSurname());
    }

    //Start export contact activity
    startActivityForResult(intent, CONTACT_SAVE_INTENT_REQUEST);

Things I'm adding directly into Intent (name, company etc.) works. But everything saved through intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data); is not showing on Sony Xperia (and I'm afraid not only Xperia series) devices. Any solution to fix?

rwojcik
  • 1,030
  • 9
  • 18
  • Did you solve ?? i am facing same issue here! My code works in all devices except Sony Experia – Darshn Nov 04 '15 at 06:54
  • I was forced to make a workaround... when user device is from Sony I just add other implenentation like: intent.putExtra(ContactsContract.Intents.Insert.EMAIL, contact.getCompanyEmail()); intent.putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK); – rwojcik Nov 04 '15 at 08:06

1 Answers1

-2

Make sure that you have given read contacts permission. I have same issue, when selecting contact.

<uses-permission android:name="android.permission.READ_CONTACTS" />
Smeet
  • 4,036
  • 1
  • 36
  • 47