首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContactsContract不能在sony xperia设备上运行

ContactsContract不能在sony xperia设备上运行
EN

Stack Overflow用户
提问于 2015-03-23 16:46:01
回答 1查看 224关注 0票数 1

我正在使用ContactsContract导出联系人到联系人应用程序。在其他设备上一切正常,但在Sony Xperia手机上,我无法保存输入到ArrayList<ContentValues> data中的数据。我的代码如下所示:

代码语言:javascript
复制
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.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data);保存的所有内容都不能在Sony Xperia (恐怕不仅仅是Xperia系列)设备上显示。有什么解决方案需要修复吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-02 02:31:25

请确保您已授予联系人“读取”权限。我在选择联系人时遇到了同样的问题。

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_CONTACTS" />
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29206124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档