2015-10-20 43 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不爲我工作的。