我有一个应用程序,可以从设备上的联系信息中检索邮寄地址。我使用以下类似的代码,使用通讯录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吗?
最佳答案
我还没有找到一种方法。我发现的唯一解决方法是,通过从游标获取ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS
列来获取完整的格式化地址,然后尝试使用几种不同的标准格式尝试将其拆分。除了使用自由格式的文本框外,没有其他方法可以在Honeycomb / ICS Contacts应用程序中输入地址,因此我猜想Contacts应用程序在将其存储到数据库之前不会尝试自动解析它。
希望我错了,有办法做到这一点-但我还没有找到。
关于android - 蜂窝/ICS中的地址格式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9160487/