Android Intent使用StructuredName创建联系人

时间:2015-10-20 08:06:25

标签: android android-intent android-contacts

我正在开发一个使用Intent创建联系人的应用。为什么使用Intent你会问:因为这是让用户在注册之前修改联系人。

我的问题是,当我使用 StructuredName StructuredPostal 时,对于其他CommonDataKinds,它运行良好。这是我的代码:

 ContentValues name = new ContentValues();
   name.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
   name.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "Firstname");
   name.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
   name.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "LASTNAME");
 data.add(name);
 ContentValues row1 = new ContentValues();
   row1.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE);
   row1.put(ContactsContract.CommonDataKinds.Organization.COMPANY, "company");
   row1.put(ContactsContract.CommonDataKinds.Organization.TITLE, "position");
 data.add(row1);
 ContentValues row3 = new ContentValues();
   row3.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.Website.CONTENT_ITEM_TYPE);
   row3.put(ContactsContract.CommonDataKinds.Website.TYPE, ContactsContract.CommonDataKinds.Website.TYPE_HOME);
   row3.put(ContactsContract.CommonDataKinds.Website.URL, "website");
 data.add(row3);

这是StructuredPostal

 ContentValues row5 = new ContentValues();
  row5.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
  row5.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, "city");
  row5.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, "street");
  row5.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, "postcode");
  row5.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, "country");
 data.add(row5);

i = new Intent(Intent.ACTION_INSERT, ContactsContract.Contacts.CONTENT_URI);
i.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, data);
startActivity(i);

由于这个问题,我暂时做了补丁:

i.putExtra(ContactsContract.Intents.Insert.NAME, "Firstname LASTNAME");
i.putExtra(ContactsContract.Intents.Insert.POSTAL, "street, code city, country");

有人知道什么是错的吗?

感谢您的回答:)

2 个答案:

答案 0 :(得分:0)

要在Intent.INSERT中使用StructuredName,您应该为StructuredName添加Insert.Name和数据行

i.putExtra(ContactsContract.Intents.Insert.NAME, "Firstname LASTNAME"); ContentValues name = new ContentValues(); name.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); name.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, "Firstname"); name.put(ContactsContract.Contacts.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); name.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "LASTNAME"); data.add(name);

StructuredPostal也是如此。您需要添加Insert.POSTAL和StructuredPostal数据行。

Insert.Name被视为DISPLAY_NAME,其余字段用于StructuredName。 Insert.POSTAL用作格式化地址。这就是您需要提供这两种数据的原因。

要了解android如何处理你的Intent,请检查此file

中的方法parseStructuredNameExtra

答案 1 :(得分:0)

对于 StructuredPostal 添加类型。并使用不同的mimetype。不要为街道等地址字段添加空值。

ContentValues row5 = new ContentValues();
row5.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);
row5.put(ContactsContract.CommonDataKinds.StructuredPostal.CITY, "city");
row5.put(ContactsContract.CommonDataKinds.StructuredPostal.STREET, "street");
row5.put(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE, "postcode");
row5.put(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY, "country");
row5.put(ContactsContract.CommonDataKinds.StructuredPostal.TYPE, ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME);
data.add(row5);

StructuredName 对我来说也不起作用。