2015-10-20 70 views
2

我正在研究使用Intent创建联系人的应用程序。为什么使用Intent你会问:因为它是让用户在注册之前根据需要修改联系人。Android意图使用StructuredName创建联系人

我的问题是当我使用StructuredNameStructuredPostal,其他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"); 

有人知道什么是错的?

感谢答案:)

回答

0

对于在Intent.INSERT使用StructuredName你应该添加两个Insert.Name和数据一行StructuredName

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你的意图,检查方法parseStructuredNameExtra在此file

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不为我工作的。