为什么添加联系意图丢弃结构化地址?

时间:2014-02-20 16:44:28

标签: android android-intent contacts android-contacts contactscontract

根据"Modifying Contacts Using Intents"(Android开发人员文档)和"Start add new contact activity and pass structured data"的答案,我设计了一种方法,用于编辑Android联系人选择器,以及用户编辑和保存的数据。

我也有一个类似的“无头”方法使用ContentProviderOperation,它适用于我尝试过的所有联系人字段(姓名,电话号码,电子邮件,结构化地址等)。

但是,在使用intent时,结构化地址会以某种方式被丢弃,并且不会出现在联系人选择器中。使用相同方法添加的网站网址可以正常使用。

这是我的代码,有点浓缩:

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(ContactsContract.Contacts.CONTENT_TYPE);

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

ContentValues addressRow = new ContentValues();
addressRow.put(Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);

// The string values are prepared earlier, and I check that none of them is null.
// The ContentProviderOperation way doesn't seem to mind nulls, however.
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, street);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.POBOX, pobox);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD, neighborhood);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, city);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.REGION, region);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, postcode);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, country);
addressRow.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, addressType);
data.add(addressRow);

// This website address is shown in the contact edit screen, as expected:
ContentValues urlRow = new ContentValues();
urlRow.put(Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
urlRow.put(ContactsContract.CommonDataKinds.Website.URL, urlValue);
data.add(urlRow);

intent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data);

startActivityForResult(intent, ADD_CONTACT_REQUEST);  // my own request code

请注意,使用意图并使用ContentProviderOperation是实现相同目标的不同方式,两者都适用于各自的方案。我的问题是关于意图,因此以下SO问题的答案并没有太大帮助:

关于我在这里乱搞什么的任何建议?

0 个答案:

没有答案