Honeycomb / ICS中的地址格式

时间:2012-02-06 13:01:18

标签: android android-contacts contactscontract

我有一个应用程序可以从设备上的联系信息中检索邮寄地址。我使用联系人API使用类似下面的代码检索街道地址,邮政编码,城市等的信息。然后我在不同的行显示地址,用户可以接受它或根据需要更改它。

String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
String[] params = new String[]{id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
Cursor addrCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, where, params, null); 
...

while(addrCur.moveToNext()) {
    String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
    String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
    String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
    String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
    String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
    ...
}       
addrCur.close();

这适用于Android 2.2 / 2.3,但我注意到3.x及更高版本,返回的整个地址可以格式化为单个字符串,并在STREET字段中包含换行符。在设备上创建联系人/地址时会发生这种情况;如果我从Gmail同步联系人,则会正确检索地址(我怀疑已同步的信息会保存在正确的字段中)。我找不到任何方法来获取这些类型地址的单个数据元素(街道,邮政编码等)。这可能吗?我需要使用新的API吗?

1 个答案:

答案 0 :(得分:1)

我还没有办法做到这一点。我发现的唯一解决方法是通过从光标获取ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS列来获取完整的格式化地址,然后尝试将其分开,假设有几种不同的标准格式。除了使用自由格式文本框之外,无法在Honeycomb / ICS联系人应用程序中输入地址,因此我猜联系人应用程序在将其存储到数据库之前不会尝试自动解析它。

希望我错了,有办法做到 - 但我还没找到。