2015-03-23 4 views
1

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

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). Любое решение исправить?

+0

Вы решили? Я столкнулся с такой же проблемой здесь! Мой код работает на всех устройствах, кроме Sony Experia – Darsh

+0

Я был вынужден сделать обходной путь ... когда пользовательское устройство принадлежит Sony. Я просто добавляю другое импрессование: aim.putExtra (ContactsContract.Intents.Insert.EMAIL, contact. getCompanyEmail()); intent.putExtra (ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK); – rwojcik

ответ

-2

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

<uses-permission android:name="android.permission.READ_CONTACTS" />