КонтактыКонтракт не работает на устройствах Sony Xperia

Я использую ContactsContract для экспорта контактов в контактное приложение. На всех остальных устройствах все работает нормально, но на телефонах Sony Xperia я не могу сохранить данные, которые я ввел в ArrayList<ContentValues> data. Мой код выглядит так:

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);

Вещи, которые я добавляю непосредственно в Intent (имя, компания и т. д.), работают. Но все сохраненное через intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data); не отображается на устройствах Sony Xperia (и боюсь не только серии Xperia). Любое решение для исправления?


person rwojcik    schedule 23.03.2015    source источник
comment
Вы решили ?? я столкнулся с той же проблемой здесь! Мой код работает на всех устройствах кроме Sony Experia   -  person Darshn    schedule 04.11.2015
comment
Я был вынужден найти обходной путь... когда пользовательское устройство от Sony, я просто добавляю другую имплементацию, например: намерение.putExtra(ContactsContract.Intents.Insert.EMAIL, contact.getCompanyEmail()); намерение.putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK);   -  person rwojcik    schedule 04.11.2015


Ответы (1)


Убедитесь, что вы дали разрешение на чтение контактов. У меня такая же проблема при выборе контакта.

<uses-permission android:name="android.permission.READ_CONTACTS" />
person Smeet    schedule 01.04.2015