2012-02-06 6 views
2

У меня есть приложение, которое может получить почтовый адрес от контактной информации на устройстве. Я извлекаю информацию для уличного адреса, почтового индекса, города и т. Д., Используя API контактов, используя код, аналогичный приведенному ниже. Затем я показываю адрес на отдельных строках, и пользователь может его принять или изменить, если это необходимо.Формат адреса в Honeycomb/ICS

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

Я не нашел способ сделать это. Единственное обходное решение, которое я нашел, - это получить полный отформатированный адрес, получив столбец ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS от курсора, а затем попытайтесь разбить его на несколько разных стандартных форм. Невозможно ввести адрес в приложении «Контакты Honeycomb/ICS», кроме как использовать текстовое поле свободной формы, поэтому я думаю, что приложение «Контакты» не пытается и не анализирует его автоматически, прежде чем хранить его в базе данных.

Надеюсь, я ошибаюсь, и есть способ сделать это, но я еще не нашел его.

Смежные вопросы